快速排序是一種在實際應用中經常用到的排序演算法,它的應用場景是大規模的資料排序,並且實際效能要好於歸併排序。它的基本原理是從陣列中選取乙個元素,把所有大於這個元素的數都放到它的後面,所有小於這個元素的數都放到它的前面,然後這個元素就把原陣列切分成了兩個部分,再分別對這個兩個部分進行同樣的操作,直到陣列不能再切分的時候,此時陣列為有序。
這種切分的演算法思想被稱為分治法,在實際應用中這種思想也被廣泛應用。
1.以a[0]為切分元素,從a[n]往前找小於它的元素;
2.找到後把它放到a[0],再從a[1]位置往後找大於切分元素的元素;
3.找到後再把他放到a[n],再重複步驟一和步驟二,直到使切分元素所有左邊的數都小於它,右邊的所有元素都大於它;
4.使用遞迴的方法調整左右兩邊,直到無法切分為止,此時陣列有序。
快速排序一遍情況下的時間複雜度為:o(nlog2n)(2為底),最差情況時,即每次選取的切分元素都為無序區中的最大或者最小值時,時間複雜度為o(n^2)。
圖示為一次完整的快排過程,這種實現方法叫做挖坑法。每次調整數字後出現的空位置則被稱為坑。
**實現
void quicksort(int* a,int l, int r)
a[i] = x;
quicksort(a, l, i - 1);
quicksort(a, i + 1, r);
}}int main()
; quicksort(a, 0, sizeof(a) / sizeof(a[0])-1);
for (int i = 0; i < (sizeof(a) / sizeof(a[0]));i++)
cout
<< a[i] << ' ';
return
0;}
排序演算法 快速排序演算法
網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...
演算法 排序演算法 快速排序
快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...
排序演算法 快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 1.從數列中挑出乙個元素,稱為 基準 pivot 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分...