C语言交换排序算法(附带完整实现源码)
交换排序是指将每一位数与其后的所有数一一比较,如果发现符合条件的数据则交换数据位置。
下面以数字 9、6、15、4、2 为例,介绍采用交换法实现将数字按从小到大的顺序进行排列,如下图所示。

图 1 交换法排序示意图
例如图 1 所示的这组数据,交换法排序的过程(只介绍第 1 次排序的过程,第 2、3 次排序的过程可以此类推)如下:
然后使用相同的方法,从当前第 2 个数字 9 开始,继续将其和后面的数字进行比较,如果遇到比当前数字小的数字则交换数字位置,以此类推,直到将一组数字按从小到大的顺序排列为止。
下面通过实例来介绍如何在程序中使用交换法实现数组元素按从小到大的顺序排列。
【实例】声明了一个整型数组和一个整型变量,其中整型数组用于存储用户输入的数字,而整型变量则作为两个元素交换时的中间变量,然后通过双层循环进行交换法排序,最后将排好序的数组进行输出。
具体代码如下:
下面以数字 9、6、15、4、2 为例,介绍采用交换法实现将数字按从小到大的顺序进行排列,如下图所示。

图 1 交换法排序示意图
例如图 1 所示的这组数据,交换法排序的过程(只介绍第 1 次排序的过程,第 2、3 次排序的过程可以此类推)如下:
- 第 1 次排序将第 1 个数字与后边的数字依次进行比较。先比较 9 和 6,9 大于 6,交换两个数字的位置,这时数字 6 成为第 1 个数字。
- 用 6 和第 3 个数字 15 进行比较,6 小于 15,保持原来的位置。
- 用 6 和 4 进行比较,6 大于 4,交换两个数字的位置。
- 再用当前数字 4 与最后的数字 2 进行比较,4 大于 2,交换两个数字的位置,从而得到图 1 中第 1 次排序后的结果。
然后使用相同的方法,从当前第 2 个数字 9 开始,继续将其和后面的数字进行比较,如果遇到比当前数字小的数字则交换数字位置,以此类推,直到将一组数字按从小到大的顺序排列为止。
下面通过实例来介绍如何在程序中使用交换法实现数组元素按从小到大的顺序排列。
【实例】声明了一个整型数组和一个整型变量,其中整型数组用于存储用户输入的数字,而整型变量则作为两个元素交换时的中间变量,然后通过双层循环进行交换法排序,最后将排好序的数组进行输出。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS /*解除vs安全性检测问题*/ #include<stdio.h> int main() { int i, j; int a[10]; int iTemp; printf("为数组元素赋值:\n"); /*通过键盘为数组元素赋值*/ for (i = 0; i<10; i++) { printf("a[%d]=", i); scanf("%d", &a[i]); } /*从小到大排序*/ for (i = 0; i<9; i++) /*外层循环元素的索引为0~8*/ { for (j = i + 1; j<10; j++) /*内层循环元素的索引为i+1~9*/ { if (a[j] < a[i]) /*如果当前值比其他值大*/ { /*交换两个数组元素的值*/ iTemp = a[i]; a[i] = a[j]; a[j] = iTemp; } } } /*输出数组*/ for (i = 0; i<10; i++) { printf("%d\t", a[i]); /*输出制表符*/ if (i == 4) /*如果是第5个元素*/ printf("\n"); /*输出换行符*/ } return 0; /*程序结束*/ }运行程序,结果为:
为数组元素赋值:
a[0]=14
a[1]=54
a[2]=90
a[3]=100
a[4]=56
a[5]=83
a[6]=92
a[7]=87
a[8]=66
a[9]=20
14 20 54 56 66
83 87 90 92 100