演算法2 快速排序之雙邊迴圈法

2021-10-23 07:00:05 字數 852 閱讀 4283

快速排序之雙邊迴圈法

思路:1、先確定基準資料,左邊資料小於基準資料,右邊資料大於基準資料;

2、根據基準資料將資料一分為二,再次遞迴執行雙邊迴圈法,其中左邊資料的右邊界為基準資料的索引號-1,右邊資料的起始邊界為基準資料的索引號+1

問題來了,如何確定基準資料?基準資料可以隨意定,但是關鍵是得到基準資料在整個列表中的位置,以便將列表資料根據基準資料進行劃分。

------雙邊迴圈法,本質是隨意確定乙個基準資料,利用左右兩個指標,進行遍歷,當右邊數小於基準資料,且左邊大於基準資料時,交換左右指標資料,直到左右指標指向同乙個資料,停止,然後將最後的資料與基準資料交換,確定基準資料的位置,將左右兩邊資料分開。

**:

def getindex(n,startindex,endindex):

#隨意指定乙個基準資料,以第乙個資料為基準資料為例

p=n[startindex]

#確定左右指標

left=startindex

right=endindex

#確定終止條件:左右指標指向同乙個問題,終止比較

while(left!=right):

#右指標遍歷過程

while(n[right]>=p and left=endindex:

return k

eles:

#獲取基準資料的位置

q=getindex(k,startindex,endindex)

#根據q將資料分為兩部分,分別再次遞迴執行排序即可

quicksort(k,startindex,q-1)

quicksort(k,q+1,endindex)

return k

快速排序之雙邊迴圈法

參考 程式設計師小灰 快速排序簡稱快排,快速排序的平均時間複雜度為o n log n 比起時間複雜度o n n 如氣泡排序,省了非常多的執行時間,故稱快速排序。快速排序的思路是分治法。此處將採用遞迴 while雙邊迴圈的方式 進行書寫快排 test public void doublelooptes...

演算法 之 快速排序法

快速排序演算法 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行 關鍵點 遞迴,折半 通常取第乙個數為對比 時間複雜度 平均 n logn function sort half a...

分治法之快速排序演算法

這週的演算法設計與分析的作業,要求是根據所講基本演算法選擇其一,給出具體事例,並且詳細描述演算法實現過程,同時利用一種語言程式設計實現,得出結果。將整個過程詳細整理上傳平台。上週所講演算法也只有那麼幾種 分治法,動態規劃 貪心演算法 回溯法 分值界限。這次用了分治法解決快速排序的問題。快速排序是c....