排序算法学习笔记
- 算法复杂度
- 算法详解
- 冒泡排序
1 /** 2 * 冒泡 3 * @param arr 4 * @return 5 */ 6 public static int[] maopao(int[] arr){ 7 System.out.println(Arrays.toString(arr)); 8 int length = arr.length; 9 for (int i = 0; i < length - 1; i++) { 10 for (int j = 0; j < length - 1 - i; j++) { 11 if (arr[j] > arr[j+1]) { // TODO 在每一次的交换过程中将最大的数字逐渐冒泡沉底到最后面,所以在优化中循环的判断条件 -i -1 12 int tmp = arr[j]; 13 arr[j] = arr[j+1]; 14 arr[j+1] = tmp; 15 } 16 } 17 } 18 System.out.println(Arrays.toString(arr)); 19 return arr; 20 }
- 选择排序(贪心算法:每一步骤的最优解)
1 /** 2 * 选择 3 */ 4 public static int[] xuanze(int[] arr) { 5 System.out.println(Arrays.toString(arr)); 6 int length = arr.length, mid, tmp; 7 for (int i = 0; i < length - 1; i++) { 8 mid = i; 9 for (int j = i + 1; j < length; j++) { 10 if (arr[j] < arr[mid]) { // TODO 找出最小的数的索引 然后和当前位置的数据进行交换 11 mid = j; 12 } 13 } 14 tmp = arr[mid]; 15 arr[mid] = arr[i]; 16 arr[i] = tmp; 17 } 18 System.out.println(Arrays.toString(arr)); 19 return arr; 20 }
- 插入排序
1 /** 2 * 插入 3 */ 4 public static int[] insertSort(int[] arr) { 5 System.out.println(Arrays.toString(arr)); 6 int length = arr.length; 7 for (int i = 1; i < length; i++) { 8 int preIndex = i - 1; // TODO 移动交换标记 9 int current = arr[i]; // 当前位置值 10 // TODO 1.如果preIndex大于等于0 继续向前交换 11 // TODO 2.交换标记值大于当前位置值,继续向前交换,直到当前值被放到前面没有比它大的位置 12 // TODO 3.实质前面的序列始终是一个从小到大的有序序列 13 while (preIndex >= 0 && arr[preIndex] > current) { 14 arr[preIndex + 1] = arr[preIndex]; 15 preIndex--; 16 } 17 // 将当前值放到序列中该有的位置 18 arr[preIndex + 1] = current; 19 } 20 System.out.println(Arrays.toString(arr)); 21 return arr; 22 }
- 希尔排序
- .
血肉苦弱机械飞升 :痛苦预示着超脱
本文来自博客园,作者:血肉苦弱机械飞升,转载请注明原文链接:https://www.cnblogs.com/supperlhg/p/16310207.html