2012-09-04 97 views
-1

我不知道我的代碼有什麼問題,但在第30行遞歸開始時我的程序中斷,只打印出未排序的數組,並且quickSort算法從未結束。如果任何人有任何線索,爲什麼這個程序不能正常工作,請讓我知道。先謝謝你。QuickSort算法遇到問題

#include <iostream> 
#include <time.h> 
using namespace std; 

void quickSort(int qarray[], int l, int r){ 

    int i = l, j = r; 
    int temp; 
    int pivot = qarray[(l+r)]/2; 

    //partitioning 
    while(i<=j){ 
     while(qarray[i]< pivot) 
      i++; 
     while(qarray[j] > pivot) 
      j--; 
     if(i<=j){ 

      temp = qarray[i]; 
      qarray[i] = qarray[j]; 
      qarray[j] = temp; 
      i++; 
      j--; 

     } 
     } 
    //Recursion of the quicksort algorithm 
    if(l < j){ 

     quickSort(qarray,l,j); 

    } 
    if(i < r){ 

     quickSort(qarray,i,r); 

    } 

} 

int main(){ 

    clock_t tStart = clock(); 

    int myArray[26] ={4,2,5,6,1,3,17,14,67,45,32,66,88, 
        78,69,92,93,21,25,23,71,61,59,60,30,79}; 

    for(int i=0;i < 26;i++){ 

     cout << "Unsorted: " << myArray[i] << endl; 
    } 


    quickSort(myArray,0,25); 

    for(int i=0;i < 26;i++){ 

     cout << "Sorted: " << myArray[i] << endl; 
    } 


    double seconds = clock()/double(CLK_TCK); 
    cout << "This program has been running for " << seconds << " seconds." << endl; 

    system("pause"); 
    return 0; 
} 
+0

你是用調試器完成的嗎? –

+0

乍一看,該分區似乎不正確的處理樞軸,雖然我不確定。當索引相等時,分區應該繼續,而'i

+0

-1 *張貼代碼牆*爲什麼沒有工作? – Drise

回答

4

錯誤在此行中(至少):int pivot = qarray[(l+r)]/2;

必須int pivot = qarray[(l + r)/2];

沒有意義通過2.樞軸劃分陣列的元素是範圍中間元件,其索引是(l + r)/2

+2

沒有意義將數組的元素**除以2。pivot是索引爲(l + r)/ 2的範圍的中間元素。 – Rost

+0

謝謝先生,確實解決了這個問題......我沒有意識到犯了這個錯誤。非常感謝 – Nick

+0

@Rost +1感謝您提供澄清。 – Drise