快速排序作為時間複雜度為o(nlogn)的演算法,在實際中經常用到。下面簡單的講解一下快速排序演算法的實現思路。
看到網上這位大牛的思路寫的非常好。挖坑填數,非常形象。下面簡單的介紹一下。
快速排序用到時分治法的思想。主要可以分為以下的三步。
1、選定乙個數作為基數
2、將大於這個的基數的數全放在右邊,小於這個基數的數全部放在左邊
3、對左右區間中的數重複1、2步驟,直到區間中只有乙個數。
這樣描述可能有一點難以理解,我們可以用挖坑+填數的方式來很好的理解
1、對於陣列a,實現l到r的排序,首先挖坑key=a[l],令i=l,j=r,此時形成第乙個坑a[i]
2、j--直到a[j]小於key的地方,令a[i]=a[j],此時a[j]形成乙個新的坑,i++
3、i++直到a[i]大於key的地方,令a[j]=a[i],填上坑a[j],此時a[i]形成新的坑,j--
4、再重複執行2,
3二步,直到
i==j
,將key填入
a[i]
中進經過上面的一番講解,突然一下子變得清晰明了了。
**實現就很簡單了。
//一次劃分
int partion(int a,int left,int right)
{ //先將第乙個數設定成乙個坑a[left]
int i=left,j=right;
int key=a[left];
while(i=key)
j--;
//如找到且i
快速排序(Quick Sort) 挖坑填數法
前面的博文講了氣泡排序 選擇排序 插入排序,今天我們談談快速排序!快速排序的基本思想是 1 先從序列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。分割槽的方式多樣,但一定要保證基準數左邊的數比它大 小 右邊的數比它小 大 3 再對左右區間重複...
「挖坑填坑」理解快速排序
快速排序的基本思路 找乙個基準元素,對陣列進行調整,調整的標準是,這個基準元素的左邊存放的都是比這個元素小的,右邊都是比這個元素大的。然後分而治之,對左右兩邊的子陣列利用同樣的規則調整,調整到每乙個子陣列中都只有乙個元素時結束。基本思想很簡單,主要是理解如何在確定基準元素之後,對陣列 子陣列 進行調...
快速排序 挖坑填數 分治法
快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 ...