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

2022-04-06 04:14:28 字數 1421 閱讀 3753

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語句。邏輯錯誤!

只能換種方法,改成大家最常見的那種就好了

1

void 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...