排序数组失败

时间:2011-04-08 15:44:38

标签: c++ sorting

我正在尝试按升序对从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]<<" ";
    }

3 个答案:

答案 0 :(得分:2)

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;
           }
       }
    }
}

答案 1 :(得分:1)

您只进行n次互换。你需要一个外部循环进行排序(假设它是bubble sort),这样你就可以继续这样做,直到你停止进行交换。

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;
    }
}

答案 2 :(得分:0)

只有一个传递数据,这里有一个示例显示发生了什么

8 7 9 2 3 4 5

完成你的功能后,结果将是

7 8 2 3 4 5 9