网上参考了一些排序方法,结合自己的想法,写了个粗版。有不对的地方请大家批评。
List<int> list = new List<int> { 45, 2, 19, 11, 85, 80, 43, 99, 152, 0 };
int maxIndex = 0;
int minIndex = 0;
int max = 0;
int min = 0;
for (int i = 0 ; i < list.Count / 2 ; i++)//亮点:只做1/2的循环
{
maxIndex = list.Count - i - 1;
minIndex = i;
max = list[maxIndex];
min = list[minIndex];
for (int j = minIndex ; j <= maxIndex ; j++)//亮点:只循环未排序的
{
max = Math.Max(list[j], max);//亮点:一大一小,同时查找
min = Math.Min(list[j], min);
}
list[list.IndexOf(max)] = list[maxIndex];
list[maxIndex] = max;
list[list.IndexOf(min)] = list[minIndex];
list[minIndex] = min;
}
原理就是:一次循环,同时找最大最小值,并交换位置。下次循环时,跳过已排序的序列。
个人认为,效率还是挺高的。自己也试了下,基本都可以满足各种排序的需要。