根据原理设计算法:算法
class Program { //选择排序法 private static void chooseSort(int[] array) { //第一个for循环:每一次循环完成后获得的当前的最大元素都与第i位作交换 for (int i = 0; i < array.Length; i++) { //min为最小元素的索引 int min = i; //第二个for循环:将当前的array[j]与array[min]做比较,若是array[j]更小,则替换min的当前索引 for (int j = i + 1; j < array.Length; j++) { if (array[min] > array[j]) { min = j; } } //当第二个for循环完成时,array[min]中存储的就是当前最小元素 //将array[min]与array[i]交换 int temp = array[i]; array[i] = array[min]; array[min] = temp; } } //打印输出数组 private static void printArray(int[] array) { foreach (int item in array) { Console.Write(item + "\t"); } Console.WriteLine(); } static void Main(string[] args) { int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; printArray(array); chooseSort(array); printArray(array); Console.ReadKey(); } }
输出结果
数组
执行的比较和交换次数
比较: N*(N-1)/2
交换: N性能
运行时间与输入无关
在每一次的for循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。设计
数据的移动量最少
交换的次数和数组的大小呈线性关系,其余的排序算法对数据移动量都是线性对数级别或平方级别的。code