1樓:匿名使用者
設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用第乙個資料)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是:
1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;
2)以第乙個陣列元素作為關鍵資料,賦值給key,即 key=a[0];
5)重複第步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,廳桐i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j+完成的最後另迴圈結束)
例如:待排序的陣列a的值分別是:(初始關鍵資料:x=49) 注意關鍵x永遠不變,永遠是和x進行比較,無論在什麼位子,最後的目的就是把x放在中間,小的放前面大的放後面。
a[0] 、a[1]、 a[2]、 a[3]、 a[4]、 a[5]、 a[6]:
進行第一次交換後: 27 38 65 97 76 13 49
按照演算法的第三步從後面開始找)
進行第二次交換後: 27 38 49 97 76 13 65
按照演算法的第四步從前面開始找》x的值,65>49,兩者交換,此時:i=3 )
進行第三次交換後: 27 38 13 97 76 49 65
按照演算法的第五步將又一次執行演算法的第三步從後開始找。
進行第四次交換後: 27 38 13 49 76 97 65
按照演算法的第四步從前面開始找大於x的值,97>49,兩者交換,此時:i=4,j=6 )
此時再執行第三步的時候就發現i=j,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所以大於49的數全部在49的後面,所以小於49的數全部在49的前面。
快速排序就是遞迴呼叫此過程——在以49為中點分割這個資料序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部資料序列的快速排序,最後把此資料序列變成乙個有序的序列,根據這種思想對於上扮運坦述陣列a的快速排序的全過程如圖6所示:
初始狀態。進行一次快速排序之後劃分為 49
分別對前後兩部分進行快速排序 經第三步和第四步交換後變成 完成排序。
76 97 65} 經第三步和第四步交換後變成 完成排序。
2樓:匿名使用者
快速排序(quicksort)是對氣泡排序的一種改進。由c. a.
r. hoare在1962年提出。它的基本思想是:
通過一趟排序將要排序的資料分割成獨巧祥塌立的兩部分,其中一孝圓部分的所有資料都比另外一部分的所有資料都要小,宴橘然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
3樓:才蓮仲俊才
快速排序是平均速度最快的排序方法,閉仔閉思想如下:
每趟選中乙個元素,並把這個元素插入到它的正確位置。戚租。
具體是每趟排完之後,選中元素的左邊都小於它,右邊元素都大於它。
然後再分別對其左邊部分和右轎裂邊部分進行快速排序。
怎樣快速排序呢?
4樓:小熊帶你打遊戲
方法如下
1、電腦開啟excel**。
選中要進行排序的列。
2、選中要進行排序的列後,點選工具欄中的排序。
3、選擇公升序之後,彈出排序提醒視窗,一定要選擇第乙個,然後點選排序。
4、點選排序之後,排序列後面的資料跟著動了。
小技巧。1、按alt+向下箭頭,可以根據已輸入過的內容自動生成下拉選單;
2、按alt+=號,可以快速插入求和公式;
3、按alt+回車鍵。
可以在指定的位置強行換行;
4、選取整個區域,按alt+; 選取時可以跳過隱藏區域,只選取顯示的區域;
5、按alt+數字鍵可以輸入特殊符號。
如 alt+41420 可以輸入 √、alt+41409 可以輸入 ×;
6、按ctrl+d向下填充。選取乙個含公式或值的單元格以及下面的n個單元格,可以填充值或公式。
快速排序的
5樓:帳號已登出
快速排序(quicksort),電腦科學詞彙,適用領域pascal,c++等語言,是對氣泡排序演算法的一種改進。
1、首先設定乙個分界值,通過該分界值將陣列分成左右兩部分。
2、將大於或等於分界稿配值的資料集中到陣列右邊,小於分界值的資料集中到陣列的左邊。此時,左邊部分中各元素都小於分界值,而右邊部分中各元素都大於或等於分界值。
3、然後,左邊和右邊的資料可以獨立排序。對於左側的陣列資料,又可以取乙個分界值,將該部分資料分成左右兩部分,同樣在左邊放置肆敬姿較小值,右邊放置較大值。右側的陣列資料也可以做類似處理。
4、重複上述過程,可以看出,這是乙個遞迴定義。通過遞迴將左側部分排好序後,再遞迴排好右側部分的順序。當左、右兩個部分各資料排序完成後,整個陣列的排序也就完成了。
排序演示。假設一開裂絕始序列是:5,3,7,6,4,1,0,2,9,10,8。
此時,ref=5,i=1,j=11,從後往前找,第乙個比5小的數是x8=2,因此序列為:2,3,7,6,4,1,0,5,9,10,8。
此時i=1,j=8,從前往後找,第乙個比5大的數是x3=7,因此序列為:2,3,5,6,4,1,0,7,9,10,8。
此時,i=3,j=8,從第8位往前找,第乙個比5小的數是x7=0,因此:2,3,0,6,4,1,5,7,9,10,8。
此時,i=3,j=7,從第3位往後找,第乙個比5大的數是x4=6,因此:2,3,0,5,4,1,6,7,9,10,8。
此時,i=4,j=7,從第7位往前找,第乙個比5小的數是x6=1,因此:2,3,0,1,4,5,6,7,9,10,8。
此時,i=4,j=6,從第4位往後找,直到第6位才有比5大的數,這時,i=j=6,ref成為一條分界線,它之前的數都比它小,之後的數都比它大,對於前後兩部分數,可以採用同樣的方法來排序。
快速排序vb要每一步的講解,快速排序 vb 要每一步的講解
沙慧月 使用選擇排序法 假設值都放在陣列裡 假設有a 0 a 9 for i 0 to 8 for j i 1 to 9 if a i a j then temp a i a i a j a j temp next next 這樣就可把數從小到大進行排列 你的 呢?沒有 怎麼 每一步的講解 在vb中...
資料結構快速排序問題,C語言資料結構 快速排序的問題
由於你傳遞的l是值傳遞,在快速排序內部出現了一個名字一樣的區域性變數,只是區域性變數被排序了,並不是傳入的變數被排序,可以採用傳地址的方式解決,或者不定義形參,直接採用全域性變數。我使用前者幫你實現了 再者,快速排序 有點問題,幫你修改了下 include include define maxsiz...
關於C 中快速排序的問題,大家來看看啊
monkey家園 常規的快速排序是這樣的 1 從序列中選第一個關鍵字,作為篩選關鍵字。在此處為24 2 比24小的在24前面,比24大的在24後面 3 這樣就完成了第一趟排序 4 接著以後每趟都是把24前面的數和24及24後面的數分為兩塊,分別用以上步驟再排序一次。5 直到所有粒度都為長度1或2 就...