【问题标题】:array sort ascending order - bubble sort数组升序排序 - 冒泡排序
【发布时间】:2019-02-25 04:24:09
【问题描述】:

我正在尝试按升序排列我的数组,但它给了我一个不同的值:

#include <iostream>

int main ()
{
    const int size = 5;
                //    0  1  2  3  4
    int arr[size] = {50,20,54,12,23};

    for (int i=0; i<5; i++) //! bubble sort ascending order
    {
        for (int j=i; j<5; j++)
        {   //      50        20
            if (arr[j] > arr[j+1])
            {
                int temp = arr [j+1];
                arr [j+1] = arr [j];
                arr [j] = temp;
            }
        }
    }

    for (int i=0; i<5; i++)
    {
        std::cout<<arr[i]<<" ";
    }

    return 0;
}

它不工作的事实,可能是循环结束时的空数组值(arr [6])弄乱了整体值吗?如果是这样,它应该能够排序到最后一个数组大小,但它会给出不同的输出

输出:20 12 0 23 50

【问题讨论】:

  • j+1 超出了j = 4 的范围。
  • arr[j+1] 更改为arr[i] 应该可以工作。
  • @jackw11111:那将不再是冒泡排序。 OTOH 现在也不是。

标签: c++ arrays bubble-sort


【解决方案1】:

为防止出现越界问题,请更改:

  • i&lt;5size-1
  • j&lt;5size-1-i
  • j=ij=0

代码:

int main ()
{
    const int size = 5;
                //    0  1  2  3  4
    int arr[size] = {50,20,54,12,23};

    for (int i=0; i<size-1; i++) //! bubble sort ascending order
    {
        for (int j=0; j<size-1-i; j++)
        {   //      50        20
            if (arr[j] > arr[j+1])
            {
                int temp = arr [j+1];
                arr [j+1] = arr [j];
                arr [j] = temp;
            }
        }
    }

    for (int i=0; i<5; i++)
    {
        std::cout<<arr[i]<<" ";
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多