詳解快速排序 -秒懂
點關注不迷路,歡迎再訪!
精簡博客內容,儘量已專業術語來分享。
努力做到對每一位認可自己的讀者負責。
幫助別人的同時更是豐富自己的良機。
快速排序算法和冒泡排序算法類似,都是基於交換排序思想的。快速排序算法對冒泡排序算法進行了改進,從而具有更高的執行效率。
快速排序算法通過多次比較和交換來實現排序,其排序流程如下:
1.首先設定一個分界值,通過該分界值將數組分成左右兩部分。
2.將大於等於分界值的數據集中到數組的右邊,小於分界值的數據集中到數組的左邊。此時,左邊部分中各元素都小於等於分界值,而右邊部分中各元素都大於等於分界值。
3.然後,左邊和右邊的數據可以獨立排序。對於左側的數組數據,又可以取一個分界值,將該部分數據分成左右兩部分,同樣將左邊放置較小值,右邊放置較大值。右側的數組數據也可以做類似處理。
4.重複上述過程,可以看出這是一個遞歸定義。通過遞歸將左側部分排好序後,再遞歸排好右側部分的順序。當左、右兩部分各數據排序完成後,整個數組的排序也就完成了。
public static void main(String[] args) {
int [] arr = {69,62,89,37,97,17,28,49};
quickSort(arr,0,arr.length-1);
System.out.print("排序後的數組結果:\n"); //輸出每步排序的結果
for (int h = 0; h < arr.length; h++) {
System.out.print(arr[h]+" ");
}
System.out.print("\n");
}
public static void quickSort(int [] arr,int left,int right) {
int f,t;
int rtemp,ltemp;
ltemp = left;
rtemp = right;
f = arr[(left + right)/2]; //分界值
while(ltemp < rtemp) {
while(arr[ltemp] < f) {
++ltemp;
}
while(arr[rtemp] > f) {
--rtemp;
}
if(ltemp <= rtemp) {
t = arr[ltemp];
arr[ltemp] = arr[rtemp];
arr[rtemp] = t;
--rtemp;
++ltemp;
}
}
if(ltemp == rtemp) {
ltemp++;
}
if(left < rtemp) {
quickSort(arr,left,ltemp-1); //遞歸調用
}
if(ltemp < right) {
quickSort(arr,rtemp+1,right); //遞歸調用
}
}
排序後的數組結果:
17 28 37 49 62 69 89 97