网上参考了一些排序方法,结合自己的想法,写了个粗版。有不对的地方请大家批评。

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

原理就是:一次循环,同时找最大最小值,并交换位置。下次循环时,跳过已排序的序列。

个人认为,效率还是挺高的。自己也试了下,基本都可以满足各种排序的需要。