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<"
"<"
low"
<<"
"3637
while(lowx)
3841
swap(a[high],a[low]);
42 cout<"
"<"
high
"<<"
"44if(first1
)45 quick_sort(a,first,low-1
);46
if(last>low+1
)47 quick_sort(a,low+1
,last);48}
4950
int main(void)51
;53 quick_sort(a,0, sizeof(a) / sizeof(a[0]) - 1
);54
55 cout<<"
test
"<56for(int i=0;i<7;i++)
57 cout<"";
58 }
執行程式會發現在演算法排序的地方無限迴圈,想了半天才知道是33和41行的位置,不管while迴圈是否執行都會執行swap語句。邏輯錯誤!
只能換種方法,改成大家最常見的那種就好了
1void quick_sort(int a,int low,int
high)
2
22 a[low]=a[high];
2324
//cout<25
26while(lowx)
2730 a[high]=a[low];
31//
swap(a[high],a[low]);
32//
cout<33
}34 a[low]=x;
3536
if(first1
)37 quick_sort(a,first,low-1
);38
if(last>low+1
)39 quick_sort(a,low+1
,last);
40 }
這裡就不是交換了,直接賦值,然後最後給a[low]賦值。
很低階的錯誤
乙個邏輯錯誤。
程式設計師可能打算在這個語句列印0 1 2,但實際上它列印0 1 2 3。語義錯誤不是由編譯器捕獲,並可以有任意數量的影響 他們可能不會出現在所有,使程式產生錯誤的輸出,引起不正常的行為,破壞資料,或導致程式崩潰。它在很大程度上,我們關心的是語義錯誤。語義錯誤可以用許多方式發生。最常見的一種語義錯誤...
快排中乙個巨集的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 ...
乙個簡單的C語言遞迴隨機快排
為了應付考試,我正在啃胡凡大神的 演算法筆記 其中第四章入門篇 2 中有乙個生動的遞迴隨機快排講解,但是沒有全部的 只有核心部分。所以我就結合書上的部分把整個的 寫出來。也算對自己學習過程的乙個記錄吧。狗尾續貂,不成敬意。include include include include include...