数组排序失败

Sorting an array fail

本文关键字:失败 数组排序      更新时间:2023-10-16

我正在尝试按升序排序由1到10的随机数组成的数组。我想出了这个函数:

void Sort(int a[10], int n)
{
    int j = 0;
    for (int i = 0; i < n-1; i++)
    {
        j = i+1;
        if (a[i] > a[j])
        {
            int aux = a[i];
            a[i] = a[j];
            a[j] = aux;
        }
    }
}

但是当我尝试输出数组时,该函数似乎不起作用:

Sort(array, 10);
    cout<<endl;
    for (int i = 0; i < 10; i++)
    {
        cout<<array[i]<<" ";
    }

您的Sort函数中的算法是错误的。它根本不排序。

无论如何,不要重新发明轮子,最好使用std::sort作为:

#include <algorithm>
std::sort(array, array+10);

对于你的Sort函数,你想用冒泡排序算法来实现,可能是为了学习。正确的实现是这样的:

void Sort(int *a, int n)
{
    for (int i = 0; i < n ; i++)
    {
       for (int j =  i + 1; j < n ; j++)
       {
           if (a[i] > a[j])
           {
              int aux = a[i];
              a[i] = a[j];
              a[j] = aux;
           }
       }
    }
}

您只进行n交换。你需要一个外循环的排序(假设它是冒泡排序),这样你继续做,直到你停止做交换。

bool Sort(int a[10], int n)
{
    bool swapped = false;
    int j = 0;
    for (int i = 0; i < n-1; i++)
    {
        j = i+1;
        if (a[i] > a[j])
        {
            int aux = a[i];
            a[i] = a[j];
            a[j] = aux;
            swapped = true;
        }
    }
    return swapped;
}
int main(int argc, char** argv) {
    int a[10] = {5,4,3,1,2,6,7,8,9,10};
    while (Sort(a,10));
    for (int i=0;i<10;++i) {
        std::cout << a[i] << std::endl;
    }
}

这只会传递一次数据,下面是一个示例,向您展示发生了什么

8 7 9 2 3 4 5

遍历函数后,结果将是

7 8 2 3 4 5 9