c 语言选择法排序 10 个数,是期末考试上机和读程序题高频经典题,选择排序核心思想是每一轮在未排序区间里面找到最小值的下标,然后把这个最小值和本轮起始位置的元素交换,一共进行 9 轮比较,10 个元素只需要 n 减 1 轮排序,和冒泡排序相邻两两交换不一样,选择排序是先找最小下标,最后统一交换,交换次数更少,考试一般要求升序排列,输入 10 个整数,排序之后输出,重点掌握双层循环结构,还有保存最小值下标的变量,很多同学容易混淆,是保存下标而不是保存数值,这个是最常见易错点。
选择排序原理
一共有 10 个数字,存放在数组 a 里面
第一轮:从 a [0] 到 a [9] 找到最小值下标 min,把 a [min] 和 a [0] 交换,第一个位置就位
第二轮:从 a [1] 到 a [9] 找到最小值下标 min,把 a [min] 和 a [1] 交换,第二个位置就位
以此类推,直到第 9 轮,只需要比较最后两个元素
外层循环控制轮次,内层循环用来查找最小值下标
完整代码 升序 输入 10 个数
include
int main()
{
int a[10], i, j, min, temp;
printf("请输入10个整数:");
for(i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
//选择排序
for(i = 0; i < 9; i++)
{
min = i; //默认本轮起始下标是最小值下标
for(j = i + 1; j < 10; j++)
{
if(a[j] < a[min])
{
min = j; //更新最小值下标
}
}
//交换
if(min != i)
{
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
printf("排序后:");
for(i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
代码要点说明
1 数组定义 a [10],下标从 0 到 9
2 外层循环 i 从 0 到 8,一共 9 轮
3 min 变量保存最小值下标,初始赋值 i
4 内层循环 j 从 i+1 开始,和后面所有元素比较
5 如果后面元素更小,更新 min 下标
6 本轮查找结束之后,交换 a [i] 和 a [min]
7 如果想改成降序,只需要把 if (a [j] < a [min]) 改成 if (a [j] > a [min])
和冒泡排序对比表格
| 排序算法 | 核心特点 | 交换时机 |
|---|---|---|
| 选择法排序 | 每轮找最小值下标,一次性交换 | 每轮最多交换一次 |
| 冒泡排序 | 相邻元素两两比较,大的往后移动 | 每次比较满足条件就交换 |
常见易错点汇总
| 错误类型 | 错误描述 | 修正方式 |
|---|---|---|
| min 存数值 | 错误写成保存最小值数字,不是下标 | min 保存的是数组下标 |
| 外层循环写成 i<10 | 多执行一轮,多余比较 | 10 个元素外层是 i<9 |
| 内层循环 j 从 i 开始 | 重复比较本轮已经就位元素 | j 从 i+1 开始 |
| 忘记交换临时变量 temp | 直接赋值覆盖数据 | 必须借助 temp 完成交换 |
| 升序降序符号写反 | 题目要求升序却写成大于号 | 升序用小于号 |
拓展补充
考试有时候会要求输出每一轮排序之后数组,也就是每一轮交换之后打印数组,只需要在外层循环交换完成之后,增加一段输出数组的代码,题型改动不大,核心双层循环逻辑不变。
【常见问题】
问题 1 c 语言选择法排序 10 个数外层循环为什么是 9 轮
回答 1 c 语言选择法排序 10 个数,n 个元素选择排序只需要 n 减 1 轮,10 个元素就是 9 轮,最后剩下一个元素天然有序,不需要继续比较,是 c 语言选择法排序 10 个数核心考点。
问题 2 c 语言选择法排序 10 个数 min 变量存的是什么
回答 1 c 语言选择法排序 10 个数里面 min 保存最小值的数组下标,不是最小值本身,这个是 c 语言选择法排序 10 个数最容易出错的地方。
问题 3 c 语言选择法排序 10 个数和冒泡排序差别是什么
回答 1 c 语言选择法排序 10 个数是每轮查找最小值下标再交换,冒泡排序是相邻元素不断比较交换,选择排序交换次数更少,是 c 语言选择法排序 10 个数常考辨析题。
问题 4 c 语言选择法排序 10 个数怎么改成降序
回答 1 c 语言选择法排序 10 个数升序判断是 a [j]a [min],其他代码不变,是 c 语言选择法排序 10 个数常见变形题。
【免责申明】
本文内容仅作为 c 语言选择法排序 10 个数备考学习参考,代码示例适配主流 gcc 环境,考试答题以本校教材写法为准,学习使用产生的相关问题由使用者自行承担。


