目錄
快速排序演算法原理
快速排序演算法的使用場景
快速排序演算法的實現
快速排序演算法的執行結果
快速排序演算法首先會在序列中隨機選擇乙個基準值(pivot),然後將除了基準值以外的數分為「比基準值小的數」和「比基準值大的數」這兩個類別,再將其排列成以下形式。分割子串行時需要選擇基準值,如果每次選擇的基準值都能使得兩個子串行的長度為原本的一半,那麼快速排序的執行時間和歸併排序的一樣,都為o(nlogn)。和歸併排序類似,將序列對半分割log2n次之後,子串行裡便只剩下乙個資料,這時子串行的排序也就完成了。因此,如果像下圖這樣一行行地展現根據基準值分割序列的過程,那麼總共會有log2n行分割子串行時需要選擇基準值,如果每次選擇的基準值都能使得兩個子串行的長度為原本的一半,那麼快速排序的執行時間和歸併排序的一樣,都為o(nlogn)。和歸併排序類似,將序列對半分割log2n次之後,子串行裡便只剩下乙個資料,這時子串行的排序也就完成了。因此,如果像下圖這樣一行行地展現根據基準值分割序列的過程,那麼總共會有log2n行。
void quicksort(int *a, int left, int right)
a[i] = key;
quicksort(a, left, i-1);
printf("sort after1:", a, right+1);
printf("\n\n");
quicksort(a, i+1, right);
printf("sort after2:", a, right+1);
printf("\n\n");
}int main(int argc, char *ar**)
; int *piarrytmp;
quicksort(iarray, 0, sizeof(iarray)/sizeof(iarray[0])-1);
system("pause");
return 0;
}
sort before:
10 23 65 -101 10000 999
left=0, right=5, keyvalue=10
sort after1:
-101 10 65 23 10000 999
sort before:
-101 10 65 23 10000 999
left=2, right=5, keyvalue=65
sort after1:
-101 10 23 65 10000 999
sort before:
-101 10 23 65 10000 999
left=4, right=5, keyvalue=10000
sort after1:
-101 10 23 65 999 10000
sort after2:
-101 10 23 65 999 10000
sort after2:
-101 10 23 65 999 10000
sort after2:
-101 10 23 65 999 10000
press any key to continue . . .
經典排序演算法6 快速排序
快速排序對給定陣列中的元素 進行重新排列,以得到乙個快速排序的分割槽,在一 個分割槽中,所有在s下標之前的元素都小於等於a s 所有在s下標之後的元素都大於等於a s 即a s 已經位於它在有序陣列中的最終 位置。1.首先選擇乙個元素為中軸,一般選擇為第乙個元素,a l 2.建立分割槽 分別掃瞄與中...
ES6演算法 快速排序 Quicksort
實現方式 function quick sort arr,start,end let mid arr start let low start let high end while low high arr low arr high while low high arr low mid arr hig...
排序總結 6 快速排序
快速排序是實踐中已知最快的排序演算法。基本思想 選取乙個樞紐元進行一趟快排,將比起小的元素放在左邊,比其大的元素放在右邊,然後遞迴的對左右兩部分分別進行快速排序即可。特點 注意幾點 1.如何選取樞紐元來避免最壞情景?2.如何進行資料分割,就是根據樞紐元進行一趟快排?3.小陣列的時候使用快排合適嗎?很...