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

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

Array.Sort要求T应该事先IComparable接口,而观察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:");
            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:
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有问题?期望高人帮忙解决。

你可能感兴趣的:(Microsoft,.NET)