【问题标题】:QuickSort not sorting array快速排序不排序数组
【发布时间】:2015-07-07 20:23:15
【问题描述】:

我一直在尝试制作一个 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=v[1]; dr=v[n]; 应该是st=0; dr=n-1;,如果我没记错的话?你觉得它有什么作用?

标签: c++ arrays codeblocks qsort


【解决方案1】:

stdr 应该是您要排序的初始和最终 indices,而不是 (另外,请记住,在 C++ 中n 个元素上的向量具有从 0 到 n-1 的索引,所以还要修复你的 for 循环),所以你必须改变

st=v[1];
dr=v[n];

st=0
dr=n-1

或者简单地说:

qsort(v, 0, n-1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多