近日在用Array.Sort<string>方法对字符串数组进行排序时遇到了一个郁闷的问题。
Array.Sort<T>要求T应该事先IComparable<T>接口,而观察System.String类的定义,的确也实现了这个接口。看来不应该有什么问题。但请看下面的代码:
usingSystem;
namespaceConsoleApplication1
...{
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>有问题?期望高人帮忙解决。
分享到:
相关推荐
`Array.Sort()`方法还支持对数组的一部分进行排序,以及对两个数组同时进行排序: ```csharp int[] subArray = { 5, 2, 9, 1, 7 }; Array.Sort(subArray, 1, 4); // 对下标1到4(含1不含5)的元素排序 ``` ```...
标题"javascript字符串排序"提示我们关注的重点是如何在JS环境中有效地对字符串进行排序。描述中提到的方法比默认的`sort()`方法效率更高,速度更快,这通常涉及到自定义排序函数的使用。 默认情况下,JavaScript的...
这段代码首先将字符串数组转换为整型数组,然后使用内置的排序函数进行排序。 6. **安装与应用**: - `setup.exe`通常是一个安装程序,用于在用户的计算机上安装VB应用程序,包括`排序.application`这样的应用...
在这个特定的题目“OJ_整型字符串排序”中,我们面临的是一个关于整型字符串排序的挑战。由于描述中提到只有资源文件而没有入口程序和测试用例,这意味着我们需要自己构建解决问题的算法并编写相应的代码。 整型...
在对字符串数组进行排序之前,需要首先将字符串数组从原始数组中分离出来,然后使用 Arrays.sort() 方法对字符串数组进行排序。 合并排序后的数组 最后,将排序后的数字数组和字符串数组合并成一个最终的数组。...
在需要按照不同的顺序对数组进行排序时,比如对数字进行升序或降序排序,或者对字符串进行不区分大小写的排序,或者根据对象中的某个属性进行排序,就必须编写相应的比较函数。比较函数的编写规则是:如果第一个参数...
- 使用`Arrays.sort()`方法对数组进行排序。例如,`Arrays.sort(array);` 对数组进行升序排序。 6. **数组查找**: - 在已排序的数组中使用`Arrays.binarySearch()`方法进行查找。例如,`int position = Arrays....
2. **排序**:使用内置的排序函数,如`Array.Sort()`,对字符串数组进行排序,可以根据字母顺序或自定义规则。 3. **搜索与查找**:利用`Array.IndexOf()`查找特定字符串在数组中的位置,或用`LINQ`查询查找满足条件...
例如,可以定义一个函数,接收一个字符串参数,该函数内部会使用.NET Framework的字符串操作方法分割字符串,然后使用内置的排序算法对分段后的结果进行排序,最后返回排序后的字符串数组。 ```csharp using System...
4. **字符串排序**:对字符串中的字符进行排序,可以使用`std::sort()`函数配合自定义比较函数。 5. **字符串连接**:高效地合并多个字符串,可以使用`std::accumulate()`函数结合`std::string`的`operator+`。 6....
因此,我们需要使用localeCompare这个字符串方法来实现真正的中文字符排序。 首先,我们需要了解localeCompare方法的基本用法。localeCompare是一个字符串方法,它接受另一个字符串作为参数,并返回一个数字来指示...
在Swift中,我们可以通过内置的`sort()`函数对字符串数组进行排序。这个函数可以按照字母顺序或自定义规则对数组元素进行升序或降序排列。以下是一些基本用法: 1. **升序排序**: ```swift var stringArray = [...
下面是一个简单的例子,展示了如何使用`Array.Sort()`对字符串数组进行排序: ```csharp using System; public class Program { public static void Main() { string[] myArray = { "8", "one", "4", "0", ...
本文将详细介绍Array.sort()方法的用法,包括对数字数组、字符串数组以及对象数组进行排序的示例。 首先,Array.sort()方法可以对数组中的元素进行排序,当没有参数传入sort方法时,默认按照字符编码的顺序来排序...
例如,使用 Array.Sort() 方法排序字符串数组时,默认的排序结果不是按照 ASCII 码的顺序。例如,字符串数组 {"1", "2", "A", "a", "B", "b"} 排序后的结果是 {"1", "2", "a", "A", "b", "B"},而不是按照 ASCII 码...
`Array.Sort`使用默认的比较器,即按照字典顺序对字符串进行升序排序。这意味着,它会根据ASCII值比较每个字符串,因此,排序后的结果将是`{"a", "b", "d", "u", "y", "z"}`。 3. **输出排序后的结果**: 使用`for...
- `sort(str)` 对字符串按字符的ASCII值进行排序。 - `num2str(num)` 将数字转换为字符串。 - `str2num(str)` 将数字字符串转换为数字值。 - `mat2str(array)` 转换数组为字符串表示形式。 - `int2str(num)` 将...
对于字符串,JavaScript 默认使用 Unicode 编码进行比较;对于数字,它会比较它们的数值大小。 例如,一个简单的数字数组从小到大排序的代码如下: ```javascript var arr = [3, 5, 2, 1]; arr.sort(function(a, b...
Java实现对字符串中的数值进行排序操作示例 本文主要介绍了Java实现对字符串中的数值进行排序操作的示例,涉及Java字符串与数组的相互转换以及数组排序相关操作技巧。 一、问题描述 对字符串"34 9 -7 12 67 25"中...