快速排序算法遇到问题

QuickSort algorithm experiencing problems

本文关键字:问题 遇到 算法 快速排序      更新时间:2023-10-16

我不确定我的代码出了什么问题,但在第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;
}

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

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

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