按字母顺序排序字符串算法c#

时间:2016-07-10 19:02:04

标签: c#

我正在制作一个程序,它具有按字母顺序排序名称的功能,我很容易使用Array.Sort()并且它工作但我需要排序功能的算法来帮助我理解更多的功能

1 个答案:

答案 0 :(得分:1)

这是Array.cs:http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/untmp/whidbey/REDBITS/ndp/clr/src/BCL/System/Array@cs/2/Array@cs 有排序方法

他们使用QuickSort - 他们检查异常,如果一切正常,他们会召唤这个:

internal void QuickSort(int left, int right) {
            // Can use the much faster jit helpers for array access.
            do { 
                int i = left;
                int j = right; 

                // pre-sort the low, middle (pivot), and high values in place.
                // this improves performance in the face of already sorted data, or 
                // data that is made up of multiple sorted runs appended together.
                int middle = GetMedian(i, j);
                SwapIfGreaterWithItems(i, middle); // swap the low with the mid point
                SwapIfGreaterWithItems(i, j);      // swap the low with the high 
                SwapIfGreaterWithItems(middle, j); // swap the middle with the high

                Object x = keys[middle]; 
                do {
                    // Add a try block here to detect IComparers (or their 
                    // underlying IComparables, etc) that are bogus.
                    try {
                        while (comparer.Compare(keys[i], x) < 0) i++;
                        while (comparer.Compare(x, keys[j]) < 0) j--; 
                    }
                    catch (IndexOutOfRangeException) { 
                        throw new ArgumentException(Environment.GetResourceString("Arg_BogusIComparer", x, x.GetType().Name, comparer)); 
                    }
                    catch (Exception e) { 
                        throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e);
                    }
                    catch {
                        throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); 
                    }
                    BCLDebug.Assert(i>=left && j<=right, "(i>=left && j<=right)  Sort failed - Is your IComparer bogus?"); 
                    if (i > j) break; 
                    if (i < j) {
                        Object key = keys[i]; 
                        keys[i] = keys[j];
                        keys[j] = key;
                        if (items != null) {
                            Object item = items[i]; 
                            items[i] = items[j];
                            items[j] = item; 
                        } 
                    }
                    i++; 
                    j--;
                } while (i <= j);
                if (j - left <= right - i) {
                    if (left < j) QuickSort(left, j); 
                    left = i;
                } 
                else { 
                    if (i < right) QuickSort(i, right);
                    right = j; 
                }
            } while (left < right);
        }
    } 

有关它的更多信息:https://en.wikipedia.org/wiki/Quicksort

相关问题