选择排序不排序第一个值

Selection sort not sorting first value

本文关键字:排序 第一个 选择      更新时间:2023-10-16

我写了这个c++函数来排序数组,它工作,但它似乎不适用于第一个值:它总是更大而不是更小!

    void s_iSort (double a[])
    {
        cout << "INCREASING SORTER:nn";
        unsigned int mx,maxx;
        double temp;
        cout << "Insert maximum element to sort: "; cin>>mx;
        for (int c=0; c<mx; c++)
            {
                maxx=0;
                for (int i=c; i<mx; i++)
                    if (a[i]<a[maxx])
                        maxx=i;
                temp=a[c];
                a[c]=a[maxx];
                a[maxx]=temp;
            }
        cout << "nDONE!nn";
    }

这是怎么回事?

您应该使用调试器,或者尝试向橡皮鸭解释您的算法。但是,我心情不好,会指出你的错误:

for (int c=0; c<mx; c++) {
    maxx=0;
    for (int i=c; i<mx; i++) if (a[i]<a[maxx]) maxx=i;
    temp=a[c];
    a[c]=a[maxx];
    a[maxx]=temp;
}

在这个循环的每次迭代中,你要遍历一个元素范围,找到该范围内的最小值,并将其作为该范围的第一个元素。它在第一次迭代中工作,但在第二次迭代中就出现了问题。将maxx(应该是该范围内的第一个元素)初始化为0,即数组的第一个元素。但是,您应该只考虑尚未排序的元素,即将其更改为

maxx = c;

还要注意的是,(除了练习)你不应该编写自己的排序算法,而应该使用std::sort