c 實現快排出現錯誤

2022-04-06 04:32:25 字數 2213 閱讀 3223

1 #include"

header_file.h"2

using

namespace

std;34

void swap(int a,intb)5

1112

void quick_sort(int a[7],int low,int

high)

1328 quick_sort(a,0

,low);

29 quick_sort(a,low+1,6

);30}31

32int main(void)33

;35 quick_sort(a,0,6

);36

37for(int i=0;i<7;i++)

38 cout<"";

39 }

執行出現c4717錯誤,看msdn解釋如下:

「function」: 遞迴所有控制項路徑,函式將導致執行時堆疊溢位

每個涉及函式的路徑都包含對該函式的呼叫。因為無法在沒有首次遞迴呼叫函式本身的情況下退出該函式,所以函式將永遠不退出。

下面的示例生成 c4717:

1

compile with: /w1 /c3//

c4717 expected

4int func(int

x) 11}12

13int

main()

可以看出來是重複呼叫func(0),而這個func(0)並沒有乙個返回值,所以會導致永遠卡在這裡,永不退出。

回過頭看我們的函式: 當low=high的時候根本沒有返回,就會一直呼叫,產生同樣的錯誤,在前邊排序函式中加入

1

if(low>=high)

2return;

就不會報錯了,不過還是會產生棧溢位的問題。

stackoverflow上的乙個一樣的問題:

看了之後改成了:

1

void quick_sort(int a, int low, int

high)227

28 quick_sort(a, low, first - 1

);29 quick_sort(a, first + 1

, high);

30 }

然後程式執行之後沒有任何反應。原因不清楚,求人解答

解答:見另外一篇快排的博文,是由於不管while是否執行都會執行swap導致的

看看正確的應該怎麼寫:

1 #include 2

3using

namespace

std;45

void qsort(int a, int low, int

high)611

int first =low;

12int last =high;

13int key = a[first];/*

óã×ö±íµäµúò»¸ö¼çâ¼×÷îªêàöá

*/14

15while(first 1621

22 a[first] = a[last];/*

½«±èµúò»¸öð¡µäòæµ½µí¶ë

*/23

24while(first < last && a[first] <=key)

2528

29 a[last] =a[first];

30/*

½«±èµúò»¸ö´óµäòæµ½¸ß¶ë

*/31

}32 a[first] = key;/*

êàöá¼çâ¼µ½î»

*/33 qsort(a, low, first-1

);34 qsort(a, first+1

, high);35}

36int

main()37;

3940 qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*

õâàïô­îäµúèý¸ö²îêýòª¼õ1·ñôòäú´æô½½ç

*/41

42for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)

4346

47return0;

48 }

c 使用list出現錯誤

在做多執行緒訪問的時候,想使用list作為儲存佇列,加佇列的時候出現如下錯誤 d vcfile c 2012 02 20 after sampletest testmutex.h 31 error c2143 syntax error missing before d vcfile c 2012 0...

C和C 易出現的低階錯誤

1.通過指標訪問c 類的成員時,報錯。錯誤 run time check failure 3 the variable is being used without being initialized.原因 可能是該指標沒有指向乙個物件,只是宣告了乙個該類的指標 方案 例項化乙個該類的物件,讓指標指向...

C 的淺拷貝出現的錯誤

之前看一些資料提到淺拷貝的問題,即在複製物件時,只是對物件中的資料成員進行簡單的賦值,預設拷貝建構函式執行的也是淺拷貝。如果物件中存在動態成員,如指標,那麼僅僅做淺拷貝是不夠的,並且容易引發錯誤,最經典的例子 include include using namespace std class a a...