|
发表于 2023-11-20 08:43:11
|
显示全部楼层
本楼为最佳答案
问题在于选择排序的实现有一些错误。以下是修正后的代码:
- #include <iostream>
- using namespace std;
- int main()
- {
- int a[10];
- int num;
- for (int i = 0; i < 10; i++)
- {
- cin >> num;
- a[ i] = num;
- }
- for (int i = 0; i < 9; i++)
- {
- int minnum = a[ i];
- int index = i; // 将index初始化为i
- for (int j = i + 1; j < 10; j++)
- {
- if (a[j] < minnum)
- {
- minnum = a[j];
- index = j; // 更新index的值
- }
- }
- if (index != i) // 如果index发生了变化,则交换a[ i]和a[index]
- {
- int temp = a[ i];
- a[ i] = a[index];
- a[index] = temp;
- }
- }
- for (int i = 0; i < 10; i++)
- {
- cout << a[ i] << endl;
- }
- return 0;
- }
复制代码
修正的地方包括:
1. 在内层循环中,不再需要额外的布尔标志 flag ,直接使用 index 来记录最小值的索引。
2. 修正了 index 的声明和赋值位置,以及交换元素的逻辑。
3. 确保在每次交换前检查 index 是否发生了变化,避免不必要的交换。
这样修改后的代码应该能够正确地实现选择排序算法。 |
|