集中常用排序算法代码
Posted 09120912zhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集中常用排序算法代码相关的知识,希望对你有一定的参考价值。
1 public class CheckSum { 2 3 /** 4 * 计算数组中数据之后为sum的两个数字 5 * @param array 6 * @param sum 7 */ 8 public void findTheSum(int array[], int sum) { 9 10 //Arrays.sort(array); 11 12 int[] copy = new int[array.length]; 13 14 MergeOrder(array, copy, 0, array.length - 1); 15 // fastOrder(array, 0, array.length - 1); 16 System.out.println(array); 17 int row = 0, high = array.length - 1; 18 while (row < high) { 19 20 if (array[row] + array[high] > sum) { 21 high--; 22 } else if (array[row] + array[high] < sum) { 23 row++; 24 } else { 25 System.out.println(array[row] + " " + array[high]); 26 if (high - 1 >= 0 && array[high] == array[high - 1]) { 27 high--; 28 continue; 29 } 30 31 if (high - 1 >= 0 && array[row] == array[row + 1]) { 32 row++; 33 continue; 34 } 35 36 row++; 37 high--; 38 } 39 40 } 41 } 42 43 44 45 //小堆排序 46 47 public void duiSortedOrder(int array[], int index,int len) { 48 49 int tempt = array[index]; 50 for (int i = 2 * index + 1; i <= len; i = i * 2 + 1) { 51 if(i<len&&array[i]>array[i+1]) i++; 52 if(tempt<array[i]) break; 53 array[index] = array[i]; 54 index = i; 55 } 56 array[index] = tempt; 57 } 58 59 60 //直接插入法 61 public void InsertOrder(int array[]) { 62 63 for (int i = 1; i < array.length; i++) { 64 int tempt = array[i], j = i - 1; 65 for (; j >= 0 && tempt < array[j]; j--) { 66 array[j + 1] = array[j]; 67 } 68 array[j + 1] = tempt; 69 } 70 } 71 72 73 74 75 /** 76 * 归并排序 77 * @param array 78 * @param copy 79 * @param low 80 * @param high 81 */ 82 public void MergeOrder(int[] array, int[] copy, int low, int high) { 83 84 if (low == high) return; 85 86 int mid = (low + high) >> 1; 87 88 MergeOrder(array, copy, low, mid); 89 90 MergeOrder(array, copy, mid+1, high); 91 92 //把元素聚合在一起 93 int left = low; 94 int right = mid+1; 95 int cindex = low; 96 while (left<=mid && right <=high) { 97 98 if (array[left] < array[right]) { 99 copy[cindex++] = array[left++]; 100 } else { 101 copy[cindex++] = array[right++]; 102 } 103 } 104 105 for (; left <= mid; ) { 106 copy[cindex++] = array[left++]; 107 } 108 109 for (; right <=high; ) { 110 copy[cindex++] = array[right++]; 111 } 112 113 114 //把排序之后的元素放置到 array中 115 116 for (int i = low; i < cindex; i++) { 117 array[i] = copy[i]; 118 } 119 return; 120 } 121 122 123 /** 124 * 快速排序 125 * 126 * @param array 127 * @param row 128 * @param high 129 */ 130 public void fastOrder(int[] array, int row, int high) { 131 132 if (row < high) { 133 int mid = Order(array, row, high); 134 fastOrder(array, row, mid - 1); 135 fastOrder(array, mid + 1, high); 136 } 137 138 } 139 140 141 public int Order(int[] array, int row, int high) { 142 143 int tempt = array[row]; 144 145 while (row < high) { 146 147 while (tempt < array[high] && high > row) { 148 149 high--; 150 } 151 152 array[row] = array[high]; 153 154 while (tempt > array[row] && row < high) { 155 row++; 156 } 157 array[high] = array[row]; 158 } 159 160 array[row] = tempt; 161 return row; 162 163 } 164 165 166 167 public static void main(String... args) { 168 CheckSum checkSum = new CheckSum(); 169 170 int[] params = new int[]{8, 7, 6, 5, 4, 3, 2}; 171 for (int i = params.length / 2 - 1; i >= 0; i--) { 172 checkSum.duiSortedOrder(params, i,params.length-1); 173 } 174 175 //输出排序后的数据 176 177 for (int i = 0; i <= params.length-1; i++) { 178 System.out.println(params[0]); 179 params[0] = params[params.length - 1 - i]; 180 checkSum.duiSortedOrder(params, 0, params.length - 1 - i); 181 } 182 183 184 checkSum.InsertOrder(params); 185 System.out.println(params); 186 187 } 188 }
以上是关于集中常用排序算法代码的主要内容,如果未能解决你的问题,请参考以下文章