求一个高效的排序算法
一个目录下有以下文件
A1.txt
A12.txt
A2.txt
1A.txt
12A.txt
2A.txt
把这些文件名做为一个string[]输入参数,输出也是一个string[],要求输出时排序成
1A.txt
2A.txt
12A.txt
A1.txt
A2.txt
A12.txt
我自已试了好几个,效率都不高,在此请教了,请给出代码
问题点数:100、回复次数:10Top
1 楼The123(Shall We Dance? :))回复于 2005-01-06 10:54:25 得分 0
你要多高的效率呢?Top
2 楼QSWW21CN(酸酸甜甜就是我啊)回复于 2005-01-06 10:58:37 得分 0
帮你顶Top
3 楼cxyPioneer(matt)回复于 2005-01-06 11:00:08 得分 0
upTop
4 楼pontus(pontus)回复于 2005-01-06 11:34:29 得分 0
你到底是按什么排序啊?排序规律是什么?Top
5 楼Fibona(Fibona)回复于 2005-01-06 11:48:02 得分 0
排序的方法就是那么几种,我不知道你所指的高效是怎么个高效法.以及你现在采用的排序方法.
Top
6 楼Sunmast(速马@Redmond, WA)回复于 2005-01-06 12:01:56 得分 0
.net内Array和ArrayList所带Sort方法,用的是quick sort非稳定算法,几乎已经是最快了
稳定排序则需要自己实现冒泡算法Top
7 楼jimh(Jimmy)回复于 2005-01-06 12:12:40 得分 0
换个思路,楼主的排序主要不是标准的字符串排序,所以有点麻烦,应该先格式化一下字符串,比如:
A1.txt -> A001.txt
A12.txt -> A012.txt
A2.txt -> A002.txt
1A.txt -> 001A.txt
12A.txt -> 012A.txt
2A.txt -> 002A.txt
主要是数字格式化位定长的,位数可以根据实际定,我这里定3位。
然后在使用系统的排序就可以,排序后再转换为原来的样式。
Top
8 楼Sunmast(速马@Redmond, WA)回复于 2005-01-06 12:32:30 得分 0
不格式化也可以
给Sort方法提供一个实现了IComparer接口的类型的对象即可Top
9 楼shan1119(大天使,卐~解!)回复于 2005-01-06 12:57:35 得分 0
学习Top
10 楼xixigongzhu(夕夕公主(※快乐在于自己※))回复于 2005-02-25 11:28:54 得分 100
http://community.csdn.net/Expert/topic/3802/3802711.xml?temp=.4805109
另一个帖子的答案
public class CustomComparer:System.Collections.IComparer
{
public int Compare(object x, object y){
string s1 = (string)x;
string s2 = (string)y;
if (s1.Length > s2.Length) return 1;
if (s1.Length < s2.Length) return -1;
for (int i = 0; i < s1.Length; i++) {
if (s1[i] > s2[i]) return 1;
if (s1[i] < s2[i]) return -1;
}
return 0;
}
}
Top




