数组的大小会使算法的性能产生很大的差异。选择排序比冒泡排序快了 100 多倍,而且选择排序比插入排序快了 200 多倍。
当数组元素量增加到 10000 个的时候,确实能看出数组大小对三种排序算法的影响。
优先级:选择排序 > 冒泡排序 > 插入排序
1.冒泡排序
public static int[] MaoPao(int[] arr) { //执行多少次 for (int i = 0; i < arr.Length; i++) { //每执行1次,把最大的放在最后 for (int j = 0; j < arr.Length - 1; j++) { int a = arr[j]; int b = arr[j + 1]; if (a>b) { arr[j+1] = a; arr[j] = b; } } } return arr; }
方法2
public static int[] MaoPao2(int[] arr) { //执行多少次 for (int i = arr.Length - 1; i >= 1; i--) { //每执行1次,把最大的放在最后 for (int j = 0; j <= i - 1; j++) { int a = arr[j]; int b = arr[j + 1]; if (a > b) { arr[j + 1] = a; arr[j] = b; } } } return arr; }
2.选择排序
找最晓小的,放在前面,再找第2个小的,直到找完。
public static int[] XuanZhe(int[] arr) { int min, temp; //执行多少次 for (int i = 0; i < arr.Length; i++) { min = i; //最小值先取当前第1个 //j从第2个值开始取 for (int j = i + 1; j < arr.Length; j++) { if (arr[j] < arr[min]) { min = j; } } //先把最小值取出来了,再操作 temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } return arr; }
3.插入排序
后面一个和前面几个比较,是放前面,中间,还是后面。
//插入排序 public static int[] InsertSort(int[] arr) { int inner, temp; //执行多少次 for (int i = 0; i < arr.Length; i++) { temp = arr[i]; inner = i; while (inner > 0 && arr[inner - 1] >= temp) { arr[inner] = arr[inner - 1]; inner -= 1; } arr[inner] = temp; foreach (var item in arr) { Console.Write(item + " "); } Console.WriteLine(); } return arr; }
冒泡和选择排序耗时差不多,插入耗时要长1半。。