选择排序程序排序不正确


#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

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

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

不是你的代码

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交换最小索引。这些任务应该是分开的,您的代码将它们混合在一起。

最新更新