快速排序分為兩部分:
2,快排函式本身,通過遞迴呼叫自身,每次呼叫可以使乙個元素回歸正確的位置,並使該元素之前的元素都小於該元素,之後的元素都大於該元素(遞迴的退出條件是base>=top)。這樣,我們可以最後把整個數列割到最小兩個元素的子列,再使子列有序,從而整個數列都有序。值得注意的是,快排不會使某個元素向自己合適位置相反的方向運動。(比如2在最後結果序列處於第3位,那麼它絕不可能在排序的過程中出現在第3位之後)。
int partition(int a,int base,int top)
if(j>i)
while(ii)
while(j>i&&a[i]<=temp)
swap(&a[i],&a[j]);
} a[base]=a[i];
a[i]=temp;
return i;
}
以上是自己書寫的partition函式,用到了交換變數的函式,相對思路簡單。
1,最後,我們總是把基準值(比如第乙個數字)賦予a[i],那麼i是什麼?無論是在哪種方法的partition函式中,最後的i與j指標指向了同乙個單元,通過i指標的意義我們易知,它是乙個值小於基準值的數。
2,兩種方法的排序過程中子列的順序不完全一致。
3,兩點是一致的並且易錯之處在於:1,先j指標從右向左遍歷。2,判斷條件是j>i,沒有等號。
深入理解快速排序與快速排序的優化
1.寫在前面 2.文章結構 主要講解一路快排,二路快排和三路快排的實現過程,作圖略。對於快排的複雜度以及其它背景知識可自行學習。3.關於快排 過程 選擇乙個參考點,以從小到大排序為例,那麼在一次快排之後,在參考點左側的資料都比參考點小,在參考點右側的資料都比參考點大,每次快排之後的參考點也就是分割點...
深入理解希爾排序
希爾排序是按照不同步長對元素進行分組插入排序的,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數很少,速度很快 當元素基本有序了,步長很小,插入排序對於有序的序列效率很高。所以,希爾排序的時間複雜度會優於o n 2 具體實現 如下,先看一種複雜一點的,但是便於理解的實現 for int i...
mysql order by排序深入理解
mysql 排序篇 mysql 排序,如果從比較深入的角度來討論這個命題,這一節完全可以出一本書。在這裡我們只做簡單介紹。mysql排序,這個動作會出現在兩個兩個地方,乙個是記憶體,另乙個是磁碟檔案。由關鍵字order by 驅動。具體的排序條件根據結果集的字段決定。1 mysql 排序的演算法 m...