快速排序也是通過分治法。它的思路是先確定第乙個元素的位置,該位置之前的元素全部小於第乙個元素,該位置之後的元素全部大於該元素。確定位置後,把陣列分為了前後2部分,對這2部分執行遞迴操作,直達遞迴到陣列為1的大小,即遞迴到了最底層,即完成了排序過程。
比如陣列 5, 3,8, 1, 23, 14,首先選取第乙個元素為,5,我們現在要確定5的位置。
首先,從後面開始和2(待確定位置的元素)比較,14 大於2,往前乙個元素為23,仍然大於2,繼續往前,直到看到元素1, 1比2小,交換這2個元素,
陣列變為: 1 , 3, 8,5, 23, 14
接著,我們從前面開始比較, 3比5小,往後為8,8比5大,交換這2個元素,
陣列變為: 1,3,5,8, 23,14
交換後,前後的位置已經重疊了。那麼5的位置也確定了。可以看出,5的位置前面的元素都小於5,5後面的元素全部都大於5。對5前後的2部分執行遞迴操作,即可完成整個排序過程。
**如下:
void quicksort(int data,int datalen)
void exchange(int datasrc,int index1,int index2)
void static quicksorthelp(int datasrc,int start,int end)
else
}} //待確定位置的val已經確定為valpos,valpos把陣列分為了2半
//對前後2半執行遞迴操作,直到劃分的陣列大小為1,那麼都有序,排序遞迴也就遞迴到最底層了
quicksorthelp(datasrc,start,valpos-1);
quicksorthelp(datasrc,valpos+1,end);
}}
軟考 軟體設計師 演算法
分類 插入排序 直接插入,希爾排序 選擇排序 簡單選擇,堆排序 交換排序 氣泡排序,快速排序 歸併排序 基數排序 直接插入排序 每一步將乙個待排序列根據乙個元素值的大小插入已經排好序的那部分去。首個元素歸入已排好序列 第二個元素跟已排好序列比較,放於那位子,後續元素遞推。希爾排序 對直接插入排序的改...
軟體設計師演算法之回溯法 全排列
全排列大家都知道。這裡是通過最普遍的全排列,來理解回溯法的乙個實現。最普通的全排列,比如a b c 三個字母,每個字母只能用一次,來進行排列,共有6種結果,比如abc,acd等。這個全排列結果和我們現實生活中n個人排隊的可能性的結果是一樣的。我這邊的思路就是按照位置來進行,比如n個元素,首先第1個位...
軟體設計師演算法之回溯法 8皇后問題
8皇后問題,我想it人士應該基本都聽過了。特別是會下西洋棋的。規則很簡單,每乙個皇后會攻擊每一條線的其它皇后,因此要確保每一條線上 包括直線和對角斜線 只能存在乙個皇后。8皇后問題我一直沒有編寫過 去實現。今天正好補上。如下是實現 define max row 8 define max column...