乙個簡單的C語言遞迴隨機快排

2021-09-25 03:00:49 字數 868 閱讀 3860

為了應付考試,我正在啃胡凡大神的《演算法筆記》,其中第四章入門篇(2)中有乙個生動的遞迴隨機快排講解,但是沒有全部的**,只有核心部分。所以我就結合書上的部分把整個的**寫出來。

也算對自己學習過程的乙個記錄吧。狗尾續貂,不成敬意。

#include

#include

#include

#include

#include

using namespace std;

//選擇隨機主元對區間進行劃分

int ran***

(int a

,int left,int right)

a[left]

=temp;

//把temp放到left與right相遇的地方

return left;

//返回下標

}//left和right初值是序列首尾下標,例如 1,n;

void

quicksort

(int a

,int left,int right)}

int main()

quicksort(a

,0,n

-1);

for(int j=

0;j<

n;j++

)return0;

}

快排整體思路:

1.ran***函式調整序列元素,使序列中隨機的乙個主元左側所有元素均不超過它,右側元素均大於它。

2.quicksort函式對該元素左右區間分別進行遞迴再調整,直到當前調整區間長度不超過1。

而選擇隨機主元的好處這裡不再贅述,感興趣的朋友可以參考《演算法筆記》p144。

(經多次檢查,此**執行無誤)

快排中乙個巨集的bug

今天寫快速排序,碰到乙個問題 使用了下面的巨集 define swap a,b int temp a a b b temp 咋看沒有問題,但是在使用時a,不是乙個值而是乙個表示式 swap v m v i 這樣在編譯器預處理的時候會展開為 int temp v m v m v i v i temp ...

快排實現時候的乙個邏輯錯誤

1 include header file.h 2 using namespace std 34 void swap int a,intb 5 1112 void quick sort int a,int low,int high 13 33swap a low a high 3435 cout l...

乙個簡單的C語言程式HelloWorld

所謂萬事開頭難嘛,我們就先寫乙個最簡單的c語言程式來認識c語言吧!萬能的helloworld include int main void 下面進行講解上面的程式 include 預處理器指令,此處引用了stdio.h main 主函式,程式第乙個呼叫的函式 printf 格式化輸出資訊 return...