排序思想:
1,將第一個數字作爲基準數字,將數組分爲左右兩部分,左邊是比它小的數字,右邊是比它大的數字;
2,將左部分按照上面的思想再次進行劃分成兩部分,依次類推;
3,將右部分按照上面的思想再次進行劃分成兩部分,依次類推;
排序趟數:
不確定
排序原理:
填坑法:
1,將第一個數字作爲基準數字拿出,留下一個坑,從數組的最後開始往前循環,發現比基準數字小的就把它填到之前留下的坑裏,從而在右側得到一個新坑;
2,再從數組的頭部開始循環查找,發現比基準數字大的,就將它填到之前後面數字被拿走留下的坑裏,從而在左側得到一個新坑;
3,如此往復,知道中間部位,將基準數字放到中間,完成一輪循環
參考圖片:
代碼實現如下:
//快速排序主方法
public static void quickSort(int[] array, int low, int high){
if (low < high) {
int mid = findMid(array, low, high);//將第一個數作爲基準,將數組分成前後兩部分
quickSort(array, low, mid - 1);//遞歸調用將左半部分再一次往下分,直至左半部分完成排序
quickSort(array, mid + 1, high);//遞歸調用將右半部分再一次往下分,直至右半部分完成排序
}
}
//將第一個數作爲基準,將數組分成前後兩部分--填坑法
public static int findMid(int[] array, int low, int high){
int temp = array[low];//將第一個數作爲基準拿出,拿出留下一個坑
while (low < high) {
while (low < high && temp <= array[high]) {//從右開始找
high --;
}
if (low < high) {//發現比基準數字小的,就把它填到之前基準數字留下的坑裏
array[low ++] = array[high];
}
while (low < high && temp >= array[low]) {//從左開始找
low ++;
}
if (low < high) {//發現比基準數字大的,就把它填到之前被拿出數字留下的坑裏
array[high --] = array[low];
}
}
array[low] = temp;//將基準數字放到中間將左右分成兩部分
return low;//返回基準數字的下標
}