快速排序詳細講解

2022-06-06 02:45:09 字數 1898 閱讀 9445

五種常見排序就是:冒泡 插入 選擇 快速排序 歸併排序

排序和查詢的關係:排序是查詢的前提 排序是重點

在這裡,快速排序,顧名思義,排序速度較快,但是較為複雜,但是遞迴這個思想,說簡單但是也有些繞,說難也就幾行**的問題。

先確定無序陣列裡的某乙個元素在有序裡的位置,這樣就把陣列分成兩半無序陣列

每一半也按照之前的方法……遞迴思想

定義兩個變數分別接收第乙個元素和最後乙個元素

定義乙個臨時變量val存放第乙個元素的值

定義兩個指標l、h分別指向第乙個元素位址和最後乙個元素位址

以下的操作中,每賦值完一次後,就停止指標的移動。交替移動指標。比如h指標的元素賦值給了l指向的元素,h指標就不動了,需要移動的是l指標。下次l指向的元素賦值給了h指向的元素,l指標就不動了,移動h指標。

由於是公升序,若h指向的元素比l指向的元素小(7<9),就把h指向的元素賦值給l指向的元素。此時l指向的元素是7

若此時l指向的元素比val小(7<9),就繼續往後移一位。

此時l指向的元素比val小(0<9),繼續後移一位

此時l指向的元素比val小(8<9),繼續後移一位

此時l指向的元素比val大(10>9),為了把大的元素往後排,就把l指向的元素賦值給h指向的元素,此時h指向的元素是10

此時h指向的元素比val大(10>9),往前面移一位

此時h指向的元素比val大(13>9),往前面移一位

此時h指向的元素比val小(2<9),為了把小的元素往前排,就把h指向元素賦值給l指向的元素,此時l指向的元素的2

l指標繼續之前的操作,最終l、h指向同乙個元素位址,就是存放9的位置

//第二個形參表示陣列第乙個元素下標,第三個形參表示陣列最後乙個元素下標

12//

表示從頭至尾的排序,可以修改形參區間,也就是排序區間

1314

for(i=0;i<6;i++)

1718

return0;

19}2021

void quicksort(int * a,int low,int

high)30}

3132

int findpos(int * a,int low,int

high)

40 a[low]=a[high];

4142

while(lowval)

45 a[high] =a[low];

46 }//

終止while迴圈後low==high

4748 a[low] =val;

49return low; //

high也行

50 }

新手講排序 詳細講解快速排序

quick sort int a,int start,int end int i start j end pivot 一.先選擇乙個基準pivot,3種選擇方式 1.固定位置,開頭或結尾或中間 2.隨機位置,採用隨機數產生start和end之間的數 3.平衡位置,即從開頭結尾中間三個數中選擇他們的中...

快速排序講解

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...

快速排序 氣泡排序 交換類排序 講解

每一趟排序選擇當前序列中的第乙個關鍵字 通常是第乙個 作為樞紐,而快速排序要做的就是把比樞紐小的關鍵字交換到樞紐前面,比樞紐大的關鍵字交換到樞紐後面。本趟排序完後會生成新的子串行,而子串行會成為下一趟排序的初始序列。通過例子來講明快速排序的規則 總結而言就是 首為樞紐,左i右j,先j後i,j從右向左...