C语言选择排序算法(附带完整实现源码)
选择排序指的是每次选择所要排序的数组中的最大值(由小到大排序则选择最小值)对应的数组元素,将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
下面以数字 9、6、15、4、2 为例,介绍采用选择法实现将数字按从小到大的顺序进行排列,如下图所示。

图 1 选择法排序示意图
从图 1 可以发现,选择法排序的过程如下:
下面通过实例来介绍如何通过程序使用选择法实现数组元素按从小到大的顺序排列。
【实例】声明了一个整型数组和两个整型变量,其中整型数组用于存储用户输入的数字,而两个整型变量用于存储数值最小的数组元素的值和该元素的位置,然后通过双层循环进行选择法排序,最后将排好序的数组输出。
具体代码如下:
下面以数字 9、6、15、4、2 为例,介绍采用选择法实现将数字按从小到大的顺序进行排列,如下图所示。

图 1 选择法排序示意图
从图 1 可以发现,选择法排序的过程如下:
- 第 1 次排序将第 1 个数字 9 和最小的数字 2 进行位置互换;
- 第 2 次排序将第 2 个数字 6 和剩下的数字中最小的数字 4 进行位置互换;
- 以此类推,每次都将下一个数字和剩余的数字中最小的数字进行位置互换,直到将一组数字按从小到大的顺序排列。
下面通过实例来介绍如何通过程序使用选择法实现数组元素按从小到大的顺序排列。
【实例】声明了一个整型数组和两个整型变量,其中整型数组用于存储用户输入的数字,而两个整型变量用于存储数值最小的数组元素的值和该元素的位置,然后通过双层循环进行选择法排序,最后将排好序的数组输出。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS /*解除vs安全性检测问题*/ #include <stdio.h> /*包含头文件*/ int main() /*主函数main()*/ { int i, j; /*定义变量*/ int a[10]; int iTemp; int iPos; printf("为数组元素赋值:\n"); /*通过键盘为数组元素赋值(成绩)*/ for (i = 0; i<10; i++) { printf("a[%d]=", i); scanf("%d", &a[i]); } /*从高到低排序*/ for (i = 0; i<9; i++) /*外层循环元素的索引为0~8*/ { iTemp = a[i]; /*设置当前元素为最大值*/ iPos = i; /*记录元素位置*/ for (j = i + 1; j<10; j++) /*内层循环元素的索引为i+1~9*/ { if (a[j]>iTemp) /*如果当前元素的值比最大值还大*/ { iTemp = a[j]; /*重新设置最大值*/ iPos = j; /*记录元素位置*/ } } /*交换两个元素值*/ a[iPos] = a[i]; a[i] = iTemp; } /*输出数组*/ for (i = 0; i<10; i++) { printf("%d\t", a[i]); /*输出制表符*/ if (i == 4) /*如果是第5个元素*/ printf("\n"); /*输出换行符*/ } return 0; /*程序结束*/ }运行程序,结果为:
为数组元素赋值:
a[0]=98
a[1]=78
a[2]=56
a[3]=60
a[4]=90
a[5]=100
a[6]=79
a[7]=69
a[8]=59
a[9]=45
100 98 90 79 78
69 60 59 56 45