【问题标题】:Selection sort program not sorting correctly [closed]选择排序程序未正确排序[关闭]
【发布时间】:2020-11-25 16:54:37
【问题描述】:
#include <iostream>

using namespace std;

int main()
{
    int n, arr[10], i, j, temp, minin;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    for (i = 0; i < n - 1; i++)
    {
        minin = i;
        for (j = i + 1; j < n; j++)
        {
            if (arr[j] < arr[minin])
                minin = j;
            temp = arr[minin];
            arr[minin] = arr[i];
            arr[i] = temp;
        }
    }
    for (i = 0; i < n; i++)
    {
        cout << arr[i];
    }
    return 0;
}

没有编译时错误。但是我的代码没有正确排序。

这是我得到的:

输入:

4 //size of the array to be sorted
5 3 2 8 //actual array to be sorted

输出:

3528

预期的输出是升序排序的数组。

【问题讨论】:

  • 请显示程序给出的输入和错误输出。
  • 不要为 C++ 问题标记 C。数据结构标签也无关紧要。
  • 如果 n > 10,您的程序将失败。
  • @schorsch312:是的,调用std::sort 无法让学生练习编写代码和学习语言。
  • 请提及必要的改动 -- 编程不是这样工作的。如果您的程序有错误,并且您编写了代码,那么您负责启动调试代码的过程,而不是我们或其他任何人。学习如何调试自己的代码是学习如何编写程序的一部分。 How to debug small programs。继续要求其他人调试代码会导致投反对票。

标签: c++ selection-sort


【解决方案1】:

在我的脑海中(根本没有测试)你需要将交换代码移出内部循环

不是你的代码

for(j=i+1;j<n;j++)
{
    if(arr[j]<arr[minin])
        minin=j;
    temp=arr[minin];
    arr[minin]=arr[i];
    arr[i]=temp;
}

而是

// calculate the index of the minimum element in the rest of the array
for(j=i+1;j<n;j++)
{
    if(arr[j]<arr[minin])
       minin=j;
}
// swap the minimum element with the current element
temp=arr[minin];
arr[minin]=arr[i];
arr[i]=temp;

也就是说,你应该先计算最小索引,然后将最小索引与i 交换。这些任务应该是分开的,你的代码把它们混在一起了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多