為了應付考試,我正在啃胡凡大神的《演算法筆記》,其中第四章入門篇(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...