我制作了这个程序来排序数字列表。它应该是选择排序,但我的老师说它更像是冒泡排序,我需要修复它。关于我需要改变哪些部分的任何建议?
#include <iostream>
using namespace std;
void printArr(const int a[], int s);
void swapVals(int& v1, int& v2);
void sortArr(int a[], int s);
int main()
{
const int s = 20;
int arr[s] = {8, 38, 25, 4, 47, 47, 38, 36, 3, 33, 2, 19, 16, 30, 5, 47, 16,
38, 13, 1
};
cout << "Unsorted array:\n";
printArr(arr, s);
cout << "\n\n";
sortArr(arr, s);
cout << "Sorted Array:\n";
printArr(arr, s);
cout << "\n";
return 0;
}
void sortArr(int a[], int s)
{
for (int i = 0; i < s-1; i++)
{
int index = i;
for (int j = i + 1; j < s; j++)
if (a[j] < a[index])
index = j;
swapVals(a[index], a[i]);
}
}
void swapVals(int& v1, int& v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}
void printArr(const int a[], int s)
{
for (int i=0; i<s; i++)
{
cout << a[i];
if (i != s-1)
cout << " ";
}
}
答案 0 :(得分:0)
我相信它是选择排序,只是你编写代码的方式让人们容易误解。
要改变哪个部分,我不得不说,它在你的sortArr函数里面,内部循环,最好在这里添加注释“找到从i + 1开始的min的索引”或者你可以调用findMin你已定义。从调用例程:main调用sortArr,sortArr只调用swap而不调用findMin,它看起来真的像冒泡排序。
另外,你的findMin不好,它找到最小值,而不是最小值的索引。