快速排序演算法解析

2021-08-25 05:23:16 字數 1186 閱讀 5573

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

while(i < j) /*控制在當組內尋找一遍*/

a[i] = a[j];

/*找到乙個這樣的數後就把它賦給前面的被拿走的i的值(如果第一次迴圈且key是

a[left],那麼就是給key)*/

while(i < j && key >= a[i])

/*這是i在當組內向前尋找,同上,不過注意與key的大小關係停止迴圈和上面相反,

因為排序思想是把數往兩邊扔,所以左右兩邊的數大小與key的關係相反*/

a[j] = a[i];

}a[i] = key;/*當在當組內找完一遍以後就把中間數key回歸*/

sort(a, left, i - 1);/*最後用同樣的方式對分出來的左邊的小組進行同上的做法*/

sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/

/*當然最後可能會出現很多分左右,直到每一組的i = j 為止*/

}

Scala快速排序演算法解析

一 源 def sort ls list int list int 二 演算法的核心 1 快速排序事先選取乙個元素作為用來比較的基準。比基準大的數放在右邊,比基準小的數放在左邊,一次分成大 小兩類。2 每一類又通過選取乙個基準再次進行大小的分類。直到左右兩邊沒有資料為止。三 遞迴的解釋 理解遞迴的關...

快速排序演算法分析解析

快速排序演算法的時間複雜度和各次標準資料元素的值關係很大。如果每次選取的標準元素都能均分兩個子陣列的長度,這樣的快速排序過程是乙個完全二叉樹結構。即每個結點都把當前陣列分成兩個大小相等的陣列結點,n個元素陣列的根結點的分解次數就構成一棵完全二叉樹 這時分解次數等於完全二叉樹的深度log2n 每次快速...

C 程式設計解析 演算法 排序 快速排序演算法

題目 輸入n個數,對這些數進行從小到大排列。n 10000。程式 測試樣例及程式執行結果noip資訊學奧賽通關 35快速排序 原價269,價59.9 現在隨著全面人工智慧時代的到來,少兒程式設計已是大勢所趨,c 資訊學程式設計是重點學習內容之一。猿博士課堂是智慧型猿少兒程式設計課堂打造的乙個知識性欄...