使用选择法(打擂寻找最大值)将7个无序的互不相同的整数按从小到大的顺序排列,并展示排序的过程。
输入
输入7个整数。
输出
输出每轮选择后的数列,每行一组,用空格分隔。
难度
较难
输入示例
5 1 7 6 3 2 4
该回答引用chatgpt:
#include <stdio.h>
int main() {
int nums[7];
printf("请输入7个整数:\n");
for (int i = 0; i < 7; i++) {
scanf("%d", &nums[i]);
}
for (int i = 0; i < 6; i++) {
int max_index = i;
for (int j = i + 1; j < 7; j++) {
if (nums[j] < nums[max_index]) {
max_index = j;
}
}
if (max_index != i) {
int temp = nums[i];
nums[i] = nums[max_index];
nums[max_index] = temp;
}
for (int j = 0; j < 7; j++) {
printf("%d ", nums[j]);
}
printf("\n");
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:选择排序的具体步骤如下:
1.输入7个无序的互不相同的整数。
示例输入:4 7 2 1 5 3 6
2.使用选择排序进行从小到大排序。
选择排序的思路是:每一轮从待排序的元素中选取最小(或最大)的元素,放到已排序的队列中。
具体步骤为:
(1)从第i个元素开始,循环比较第i+1到第7个元素,找到最小的元素。
(2)将第i个元素和最小的元素交换位置。
(3)重复(1)和(2)的步骤,直到整个数组排序完成。
具体实现如下:
using namespace std;
void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int min_idx = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_idx]) min_idx = j; } swap(arr[i], arr[min_idx]); //输出每一轮排序之后的结果 for (int k = 0; k < n; k++) { if (k == 0) cout << arr[k]; else cout << " " << arr[k]; } cout << endl; } }
int main() { int arr[7]; for (int i = 0; i < 7; i++) cin >> arr[i]; selectionSort(arr, 7); return 0; }
3.展示每一轮排序之后的结果。
在选择排序的每一轮排序之后,都将当前数组的内容输出。具体实现在上面的代码中已经给出。