-1

我不确定我的代码有什么问题,但是在第 30 行,当递归开始时,我的程序中断并且只打印出未排序的数组,并且 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;
}
4

1 回答 1

4

此行中的错误(至少):int pivot = qarray[(l+r)]/2;

一定是int pivot = qarray[(l + r) / 2];

将数组元素除以 2 是没有意义的。 Pivot 是索引为 的范围的中间元素(l + r) / 2

于 2012-09-04T16:56:35.373 回答