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

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

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

using System;

namespace ConsoleApplication1
... {
classProgram
...{
staticvoidBubbleSort(string[]array)
...{
inti,j;//交换标志
stringtemp;
boolexchange;

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;
}


}

}


staticvoidshowStrings(string[]ss)
...{
for(inti=0;i<ss.Length;i++)
Console.WriteLine(ss[i]);
}


staticvoidMain(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(
"UseBubbleSort:");
showStrings(ss1);

Array.Sort
<string>(ss2);
Console.WriteLine(
"UseArray.Sort<string>:");
showStrings(ss2);
}

}

}

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

Use BubbleSort:
a=1
a_1=1
a_1=1_1
a_1_1=1
b=2
b_2=2
b_2=2_2
b_2_2=2
Use Array.Sort<string>:
a_1_1=1
a_1=1
a_1=1_1
a=1
b_2_2=2
b_2=2
b_2=2_2
b=2
Press any key to continue . . .

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

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

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

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

你可能感兴趣的:(算法,J#,Exchange)