1.冒泡排序
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
最差时间复杂度 
最优时间复杂度 
平均时间复杂度 
2.插入排序
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
最差时间复杂度 
最优时间复杂度 
平均时间复杂度


3.选择排序
1.在未排序序列中找到最小(大)元素,存放到序列的起始位置
2.从剩余未排序元素中寻找最小(大)元素,放到已排序序列的末尾
3.循环操作,直至所有元素排序完成
最差时间复杂度 О(n²)
最优时间复杂度 О(n²)
平均时间复杂度 О(n²)

4.希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
最差时间复杂度 根据步长串行的不同而不同。
最优时间复杂度 O(n)
平均时间复杂度 根据步长串行的不同而不同。

//冒泡排序 private static int[] maopaosort(int[] arr) { int temp; bool ischange; for (int i = 0; i < arr.Length - 1; i++) { ischange = false; for (int j = arr.Length - 1; j > i; j--) { if (arr[j] < arr[j - 1]) { temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; ischange = true; } } if (!ischange) break; } return arr; } //插入排序 private static int[] charusort(int[] arr) { for (int i = 1; i < arr.Length; i++) { int temp = arr[i]; while ((i > 0) && (arr[i-1] > temp)) { arr[i] = arr[i - 1]; i--; } arr[i] = temp; } return arr; } //选择排序 private static int[] xuanzesort(int[] arr) { int min,temp; for (int i = 0; i < arr.Length; i++) { min = i; for (int j = i+1; j < arr.Length; j++) { if (arr[min] > arr[j]) { min = j; } } temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } return arr; } //希尔排序 private static int[] xiersort(int[] arr) { for (int inc = 5; inc > 0; inc /= 2) { for (int i = inc; i < arr.Length; i++) { int temp = arr[i]; while((i>inc-1)&&(arr[i-inc]>temp)){ arr[i] = arr[i - inc]; i-=inc; } arr[i] = temp; } Console.WriteLine(string.Join(",", arr)); } return arr; }

浙公网安备 33010602011771号