快速排序演算法C 實現

2021-07-22 09:40:13 字數 1073 閱讀 4889

快速排序採用的思想是分治思想。

快速排序是找出乙個元素(理論上可以隨便找乙個)作為基準(pivot),然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,如此作為基準的元素調整到排序後的正確位置。遞迴快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正 確位置,排序完成。所以快速排序演算法的核心演算法是分割槽操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞迴。

舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為

2 | 2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指標分別從兩邊進行掃瞄,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移

2 | 2 4 9 3 6 7 1 5 比較2和1,1小於2,所以把1放在2的位置

2 | 1 4 9 3 6 7 1 5 比較2和4,4大於2,因此將4移動到後面

2 | 1 4 9 3 6 7 4 5 比較2和7,2和6,2和3,2和9,全部大於2,滿足條件,因此不變

經過第一輪的快速排序,元素變為下面的樣子[1] 2 [ 9 3 6 7 4 5]

之後,在把2左邊的元素進行快排,由於只有乙個元素,因此快排結束。右邊進行快排,遞迴進行,最終生成最後的結果。

**實現如下:

//left++的條件是(1)v[right]賦值給了v[left](2)v[left]//right--的條件是(1)v[left]賦值給了v[right](2)v[right]>base

//迴圈結束的條件是left==right

int myquicksort(vector

&v, int left, int right)

while (left < right && v[left] <= base)

left++;

if (left < right)

}v[left] = base;

myquicksort(v, low, left - 1);

myquicksort(v, left + 1, high);

return

0;}

快速排序演算法 c 實現

namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...

快速排序演算法C 實現

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演...

快速排序演算法C 實現

quick sort stl中也有現成的快速排序演算法,內部實現採用了以下技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 快速排序與插入排序結合 include include includeusing namespace std 這一版本是最簡單實現版本,對於快速排序的優...