用Array.Sort对字符串进行排序的问题

    技术2022-05-11  99

    近日在用Array.Sort<string>方法对字符串数组进行排序时遇到了一个郁闷的问题。

    Array.Sort<T>要求T应该事先IComparable<T>接口,而观察System.String类的定义,的确也实现了这个接口。看来不应该有什么问题。但请看下面的代码:

    using  System; namespace  ConsoleApplication1 {    class Program    {        static void BubbleSort(string[] array)        {            int i, j; //交换标志             string temp;            bool exchange;            for (i = 0; i < array.Length; i++//最多做R.Length-1趟排序             {                exchange = false//本趟排序开始前,交换标志应为假                for (j = array.Length - 2; j >= i; j--)                {                    if (System.String.CompareOrdinal(array[j + 1], array[j]) < 0) //交换条件                    {                        temp = array[j + 1];                        array[j + 1= array[j];                        array[j] = temp;                        exchange = true//发生了交换,故将交换标志置为真                     }                }                if (!exchange) //本趟排序未发生交换,提前终止算法                 {                    break;                }            }        }        static void showStrings(string[] ss)        {            for (int i = 0; i < ss.Length; i++)                Console.WriteLine(ss[i]);        }        static void Main(string[] args)        {            string[] ss1 =                 {                    "a=1",                    "b=2",                    "a_1=1",                    "b_2=2",                    "a_1_1=1",                    "b_2_2=2",                    "a_1=1_1",                    "b_2=2_2"                };            string[] ss2 =                 {                    "a=1",                    "b=2",                    "a_1=1",                    "b_2=2",                    "a_1_1=1",                    "b_2_2=2",                    "a_1=1_1",                    "b_2=2_2"                };            BubbleSort(ss1);            Console.WriteLine("Use BubbleSort:");            showStrings(ss1);            Array.Sort<string>(ss2);            Console.WriteLine("Use Array.Sort<string>:");            showStrings(ss2);        }    }}

    其中 BubbleSort 是我自己写的一个简单的冒泡排序法。运行这段代码,得到的结果如下:

    Use BubbleSort:a=1a_1=1a_1=1_1a_1_1=1b=2b_2=2b_2=2_2b_2_2=2Use Array.Sort<string>:a_1_1=1a_1=1a_1=1_1a=1b_2_2=2b_2=2b_2=2_2b=2Press any key to continue . . .

    两种排序得到了截然不同的顺序。

    观察起来,问题貌似出在“_”和“=”的比较上。

    单独比较字符‘_’和‘=’,‘_’是大于‘=’的,也就是说,冒泡排序法排出来的顺序才是正确的。

    难道是Array.Sort<T>有问题?期望高人帮忙解决。


    最新回复(0)