问题描述
用简单选择排序对十个数字进行选择排序,要求十个数字从键盘输入。例如从键盘输入12 14 5 8 3 13 19 7 21 9 将输出:3 5 7 8 9 12 13 14 19 21。
什么是简单选择排序
- 工作原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 算法步骤:
1、设待排序的记录存放在数组a[1…n]中。第一趟从a[1]开姶,通过 n-1 次比较,从n个记录中选出关键字最小的记录,下标记为min,交换 a[i1和a[min]。
2、第二趟从 a[2] 开始,通过n-2次比较,从 n-1 个记录中选出关键字最小的记录,下标记为min,交换a[2]和a[min]。
3、 依次类推,第i趟从 a[i] 开始,通过n-i次比较,从 n-i+1 个记录中选出关键字最小的记录,下标记为min,交换a[i]和a[min]。
4、 经过n-1 趟,排序完成。
代码实现
// 用选择排序对十个数字进行排序 数字有键盘输入
void choseSort(int* a, int length) {
int min= 0;
for (int i = 0; i < length-1; i++) {//总共有n-1趟排序
//1.找出未排序数组中最小的元素
min = i;
for (int j = i + 1; j < length; j++) {
if (a[min] > a[j]) {
min = j;
}
}
//2.将找到的最小元素与未排序数组的第一个元素交换
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}
int main()
{
int num[10];
printf("请输入十个待排数字(整数):\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &num[i]);
}
printf("排序前的序列如下:\n");
for (int i = 0; i < 10; i++) {
printf("%2d ", num[i]);
}
choseSort(num, 10);
printf("排序后的序列如下:\n");
for (int i = 0; i < 10; i++) {
printf("%2d ", num[i]);
}
return 0;
}