c++ 为什么这个快速排序程序没有输出?

ki0zmccv  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(137)

我把一个整型数组作为一个整型数组的输入,我期待一个排序后的整型数组的输出,但是没有输出。
我尝试使用一个递归快速排序算法,它将一个int数组作为输入,并给予一个排序数组作为输出。我希望排序数组显示在终端中,但没有输出。这是代码

#include <iostream>
#define SIZE 10
using namespace std;
void swap(int* a, int* b)
{
  int temp = *a;
  *a  = *b;
  *b = temp;
}
int partition(int* array,int p, int q)
{
   int key = array[p];
   int i = p;
   for(int j = p+1; j <= q; j++ )
   {
    if(key > array[j])
    {
       i++;
       swap(&array[i],&array[j]);
    }
   }
   swap(&array[i],&array[p]);
   return i;
}
void quicksort(int* array,int p,int q)
{
    if(p < q)
    {
     int r = partition(array,p,q);
     quicksort(array,p,r-1);
     quicksort(array,r,q);
    }
}
int main()
{
 int unsorted[SIZE] = {6,2,5,-1,11,3,17,-9,1,10};
 quicksort(unsorted,0,SIZE-1);
 cout << "The sorted array" << endl;
 for(int i = 0; i < SIZE; i++)
 {
    cout << unsorted[i] <<" ";
 }
 
}
cnwbcb6i

cnwbcb6i1#

你粘贴的代码在quicksort函数中输入了无限递归。另外,我建议使用std::vector并通过引用传递它,而不是使用C风格的数组。std::vector是一个更灵活的容器。
以下是更正后的代码https://onlinegdb.com/q4LxWciVC

#include <iostream>
#define SIZE 10
using namespace std;
void swap(int* a, int* b)
{
  int temp = *a;
  *a  = *b;
  *b = temp;
}
int partition(int* array,int p, int q)
{
   int i = p-1;
   int pivot = array[q]; // make pivot the last element of the array

   for (int j{p};j<q;++j)
   {
       if (array[j] < pivot)
       {
           i++;
           swap(&array[i], &array[j]);
       }
   }

   swap(&array[i+1], &array[q]);

   return i+1;
}
void quicksort(int* array,int p,int q)
{
    if(p >= q){
        return;
    }
    
     std::cout<<"\n---------Reached here---------\n";
     int r = partition(array,p,q);
     quicksort(array, p, r-1);
     quicksort(array, r+1, q);
    
}
int main()
{
 int unsorted[SIZE] = {6,2,5,-1,11,3,17,-9,1,10};
 quicksort(unsorted,0,SIZE-1);
 cout << "The sorted array" << endl;
 for(int i = 0; i < SIZE; i++)
 {
    cout << unsorted[i] <<" ";
 }
 
}

输出:

  • -------到达此处--------
  • -------到达此处--------
  • -------到达此处--------
  • -------到达此处--------
  • -------到达此处--------
  • -------到达此处--------
    已排序的数组1 2 3 5 6 10 11 17

相关问题