快排的疑惑?

2021-06-12 21:01:02 字數 812 閱讀 3279

以前一直不理解快排是什麼東西,那天忘記看了乙個什麼突然感覺明白了快排是什麼東東。然後以公升序排列為例寫了乙個程式。然後按照下面的思路寫了一段**。

快排就是找乙個數作為基數,與其比較比起比起小的放在左邊,比其大的放其右邊,遞迴其左右,一般情況下是選第乙個數作為基數。

void swap(int *x,int *y)

void qs(int *input,int begin ,int end)

} qs(input,begin,flag);

qs(input,flag+1,end);

}

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

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

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

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

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

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後令迴圈結束。)

看上去其思路是每一趟的快排都是要走一邊所有的資料,對比了一下上面的已經排好序的情況也是,感覺和我的那個思路差不多,演算法思路最壞的情況也是n^2,而分治的情況就是nlgn為什麼不直接用分治演算法呢?也請大家指點一下我的那個思路那裡有問題。

快排2 經典快排和荷蘭國旗快排

基礎知識見 建議先閱讀基礎知識,並自己手推一遍 演算法原理 第一步 取陣列最後乙個數作為num,將陣列中的 num的數放在陣列的左邊,num的數放在陣列的右邊,這是可以理解為分成了兩個陣列 第二步 然後將 num的部分當成乙個陣列,繼續第一步 num的部分同理 第三步 若陣列的大小 2,則結束。流程...

python實現快排演算法 python快排演算法詳解

快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...

分治 快排 快選

快排模板 include using namespace std const int n 1e5 10 int n,a n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain 快速選擇演算法 選擇...