/** * 冒泡排序 */ public static void Bubble_Sort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length - i - 1; j++) { if (a[j] > a[j + 1]) { a[i] = a[i] + a[j]; a[j] = a[i] - a[j]; a[i] = a[i] - a[j]; } } } } /** * 選擇排序 */ public static void Select_Sort(int[] a) { int minIndex = 0; for (int i = 0; i < a.length - 1; i++) { minIndex = i; for (int j = i + 1; j < a.length; j++) { if (a[j] < a[minIndex]) { minIndex = j; } } if (minIndex != i) { a[i] ^= a[minIndex]; a[minIndex] ^= a[i]; a[i] ^= a[minIndex]; } } } // 插入排序 public static void Insert_Sort(int[] a) { int length = a.length; int insertval = 0; int index = 0; for (int i = 1; i < length; i++) { insertval = a[i]; index = i - 1; /** * 5 4 3 2 1 * 4 5 3 2 1 * 3 4 5 2 1 * 2 3 4 5 1 * 1 2 3 4 5 */ while (index >= 0 && insertval < a[index]) { a[index + 1] = a[index]; index--; } a[index + 1] = insertval; } } /** * 快速排序——雙向檢索,返回調整後key的位置 */ private static void part(int l, int r, int A[]) { if (l < r) { int i = l, j = r; int key = A[i];// 取出收個數做爲key,挖出第一個坑 while (i < j) { // 循環從末尾找到第一個比key小或等於的數的索引j while (i < j && A[j] > key) j--; if (i < j) // 將這個比key小的數填入key處的坑,造成新坑索引j,同時增長索引i A[i++] = A[j]; // 循環從i開始找到第一個打大於key的數字索引i while (i < j && A[i] < key) i++; if (i < j) // 將這個數填入上次的坑j內,同時j向下更新 A[j--] = A[i]; } // 將key值填入中坑 A[i] = key; part(l, i - 1, A); part(i + 1, r, A); } } /** * 快速排序——單向搜索 由小到大 */ private static void part_single_s2b(int l, int r, int[] A) { if (l < r) { int i = l - 1; int key = A[r]; for (int j = l; j < r; j++) { if (A[j] > key) { i++; int tmp = A[i]; A[i] = A[j]; A[j] = tmp; } } A[r] = A[i + 1]; A[i + 1] = key; part_single_s2b(l, i, A); part_single_s2b(i + 2, r, A); } }
關於快排序單掃描的解釋:圖摘自結構之法大神博客:http://blog.csdn.net/v_JULY_v/article/details/6262915
關於挖坑填數的雙向掃描:
參加此大神博客:http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html html
Console: java
=======隨機數組100000個數據=======
=======耗時0.014毫秒=======
=======快速排序,雙向掃描快速排序,生成有序數列=======
=======耗時0.016毫秒=======
=======快速排序,單向掃描快速排序,由大到小=======
=======耗時0.232毫秒=======
=======快速排序,雙向掃描快速排序,由小到大=======
=======耗時0.005毫秒=======
=======冒泡排序,由小到大=======
=======耗時2.541毫秒=======
=======選擇排序,由小到大=======
=======耗時3.741毫秒=======
=======插入排序,由小到大=======
=======耗時0.004毫秒======= windows