我一直在尝试制作一个 qsort 算法,但到目前为止我失败得很惨。请记住,在编程方面我是个新手,是的。在我构建并运行并输入我的数组后,它返回完全相同的数组,而不是对其进行排序。这是有问题的代码:
#include <iostream>
using namespace std;
int v[11], i, n, st, dr;
void qsort (int v[11], int st, int dr)
{
int i=st, j=dr;
int aux;
int pivot = v[(st+dr)/2];
while(i<=j)
while(v[i]<pivot)
{
i++;
if(i<=j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
i++;
j--;
}
}
if(st<j)
qsort(v,st,j);
if(i<dr)
qsort(v,i,dr);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
st=v[1];
dr=v[n];
qsort(v, st, dr);
cout<<"vectorul sortat este"<<' ';
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
return 0;
}
提前致谢!
最佳答案
st
和 dr
应该是您要排序的初始和最终索引,而不是值 (另外,请记住,在 C++ 中,n 元素上的 vector 具有从 0 到 n-1 的索引,因此还要修复你的 for
循环),所以你必须更改
st=v[1];
dr=v[n];
到
st=0
dr=n-1
或者简单地说:
qsort(v, 0, n-1);
关于c++ - QuickSort 不排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31278558/