快速排序法的思想:
通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。
代碼如下:
剛開始還是有點難理解的,看了別人的代碼,再理解起來就比較容易了,做過小的總結,只爲遇見更好的自己。
/**
* 快速排序算法
*
* @author HeHuan
*
*/
public class Quick {
public static void main(String[] args) {
int a[] = { 12, 15, 9, 20, 6, 31, 24 };
quickSort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
/**
* 分治法的思想加遞歸
* @param a 數組
* @param low 數組的最低位
* @param high 數組的最高位
*/
public static void quickSort(int[] a, int low, int high) {
if (low < high) {
int middle = getMiddle(a, low, high);// 獲取中間的數值,
quickSort(a, low, middle - 1);// 排序左邊的數據
quickSort(a, middle + 1, high);// 排序右邊的數據
}
}
private static int getMiddle(int[] a, int low, int high) {
int temp = a[low];// 取數組的第一個值爲初始值,與最右邊的值進行對比
while (low < high) {
while (temp < a[high] && low < high) {// 如果小於最後邊的值
high--;
}
a[low] = a[high];// 如果temp大於右邊的值,填坑到low的位置,high的位置空了出來
while (temp > a[low] && low < high) {// 如果大於左邊的值
low++;
}
a[high] = a[low];// 如果temp小於左邊的值,高位被填坑,low位又被騰出來
}
a[low] = temp;//最後把temp值給low位,位置也就固定了,不會再改變,這時候low = high
return high;
}
}