选择排序法
1.与冒泡排序法次序相反的另一种排序法是从前往后排,即首先排好最前面的一个数,然后排第二个数……最后排倒数第一个数。
排序方法为每次在当前还未排好序的数中选择一个最大的数与这组数中的第一个数交换,直到所有的数都排好序为止,将这种排序方法称为选择排序法。
2.举例:
/*
举例:9 8 7 6 5 4 3 2 1 0
第一趟:0 9 8 7 6 5 4 3 2 1
第二趟:0 1 9 8 7 6 5 4 3 2
第三趟:0 1 2 9 8 7 6 5 4 3
第四趟:0 1 2 3 9 8 7 6 5 4
第五趟:0 1 2 3 4 9 8 7 6 5
第六趟:0 1 2 3 4 5 9 8 7 6
第七趟:0 1 2 3 4 5 6 9 8 7
第八趟:0 1 2 3 4 5 6 7 9 8
第九趟:0 1 2 3 4 5 6 7 8 9
*/
3.代码实现:
//输入n个整数,用选择排序法将他们按升序重新排列后输出
#define N 10 //要排列的数字的个数,用#define定义便于修改
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0; //排序循环变量
int j = 0; //排序循环变量
int arr[N] = { 0 }; //要排序的数组
printf("请输入%d个数字:", N);
for (i = 0; i < N; i++)
{
scanf("%d", arr + i); //自行输入N个元素
}
//开始选择排序
for (i = 0; i < N - 1; i++) //第一层循环表示最前面的“最小的”元素,需要比 N - 1 次才能比完
{
for (j = i + 1; j < N; j++) //第二层循环表示已经比较好的最小元素的后面的元素,从第 i + 1 个元素到第 N 个元素,共 N - i - 1个
{
if (arr[i] > arr[j]) //如果“最小的”数大于它后面的数,则换位
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
//打印排好的数列
for (i = 0; i < N; i++)
{
printf("%d\t", arr[i]);
}
//打印完之后换行
printf("\n");
system("pause");
return 0;
}
4.结果为: