2025-11-21 08:04:05C语言数组排序的5种方法(附带实例)
C语言中的数组是一组有序数据的集合。这里,“有序”指的是数组元素在内存中的存放方式是有序的,其引用方式也有规律可循,而不是说数组元素在数组中是按照数值大小有序排列的。 那么,有没有可能让数组元素按照数值大小有序排列呢?当然可以,下面就一起来学习下数组的各种常用排序算法。
1、C语言选择法排序数组
选择法排序的原理如下:每次在待排序数组中查找最大或最小的数组元素,将其值与最前面没有进行过排序的数组元素的值互换。这里,由大到小排序应查找最大值,由小到大排序则应查找最小值。 下面以数字 9、6、15、4、2 为例,利用选择法使其从小到大排序,每次交换后的数字顺序如下表所示。
表:选择法排序(从小到大)
排序过程元素【0】元素【1】元素【2】元素【3】元素【4】起始值961542第1次261549第2次241569第3次246159第4次246915排序结果246915
第一次排序过程中,将第一个数字和最小的数字进行了位置互换;第二次排序过程中,将第二个数字和剩下数字中最小的数字进行了位置互换。
依此类推,每次都将下一个数字和剩余数字中最小的数字进行位置互换,直到将一组数字按从小到大排序。 【实例】声明了一个整型数组和两个整型变量。其中,整型数组用于存储用户输入的 10 个数值,而整型变量用于存储数值最小的数组元素和该元素的位置。通过双层循环进行选择法排序,最后将排好序的数组元素输出。
#include
int main()
{
int i,j;
int a[10]={65,45,32,13,67,98,75,42,18,23}; /*定义数组,存储用户输入的10个数*/
int iTemp; /*定义变量,表示最小的数组元素*/
int iPos; /*定义变量,表示元素位置*/
/*使用选择法对数组元素从小到大排序*/
for(i=0;i<9;i++) /*设置外层循环下标为0~8,表示前9个数组元素*/
{
iTemp = a[i]; /*假设当前元素为最小值*/
iPos = i; /*记录最小元素位置*/
for(j=i+1;j<10;j++) /*设置内层循环下标为i+1~9,表示剩下的未排序数组元素部分*/
{
if(a[j] { iTemp = a[j]; /*重新设定最小值*/ iPos = j; /*修正最小元素位置*/ } } a[iPos] = a[i]; /*此两行代码用于将最小的数组元素和当前排序次数对应的数组元素互换*/ a[i] = iTemp; } printf("排序结果如下:\n"); /*输出数组*/ for(i=0;i<10;i++) /*输出数组*/ { printf("%d\t",a[i]); /*用制表位分隔数据*/ if(i == 4) /*如果是第5个元素*/ printf("\n"); /*输出换行*/ } printf("\n"); /*程序结束*/ return 0; } 1) 声明一个整型数组,并通过键盘输入为数组元素赋值。 2) 设置一个嵌套循环: 第一层循环为前 9 个数组元素,并在每次循环时将对应当前次数的数组元素设置为最小值(如果当前是第 3 次循环,那么将数组中第 3 个元素,也就是下标为 2 的元素设置为当前的最小值);在第二层循环中,循环比较该元素之后的各个数组元素,并将每次比较结果中较小的数设置为最小值,在第二层循环结束时,将最小值与开始时设置为最小值的数组元素进行互换。 当所有循环都完成以后,就将数组元素按照从小到大的顺序重新排列了。 3) 循环输出数组中的元素,并在输出 5 个元素以后换行,在下一行输出后面的 5 个元素。 运行程序,结果为: 排序结果如下: 13 18 23 32 42 45 65 67 75 98 2、C语言冒泡法排序数组 冒泡法排序的原理如下:每次比较数组中相邻的两个数组元素的值,将较小的数排在较大的数前面,可实现数组元素从小到大排序;每次将较大的数排在较小的数前面,可实现数组元素从大到小排序。 仍以数字 9、6、15、4、2 为例,对这几个数字进行冒泡法排序,使其从小到大排列。每次排序后的顺序如下表所示。 表:冒泡法排序(从小到大) 排序过程元素【0】元素【1】元素【2】元素【3】元素【4】起始值961542第1次296154第2次249615第3次246915第4次246915排序结果246915 在第一次排序过程中,将最小的数字移动到第一的位置,并将其他数字依次向后移动;在第二次排序过程中,从第二个数字开始的剩余数字中选择最小的数字,并将其移动到第二的位置,剩余数字依次向后移动。 依此类推,每次都将剩余数字中最小的数字移动到当前剩余数字的最前方,直到将一组数字按从小到大排序为止。 【实例】冒泡法从小到大排序。声明一个整型数组和一个整型变量,整型数组用于存储用户输入的数字,整型变量作为两个元素交换时的中间变量,通过双层循环进行冒泡法排序,最后将排好序的数组输出。 #include int main() { int i,j; int a[10]={65,45,32,13,67,98,75,42,18,23}; int iTemp; /*采用冒泡法使数组元素从小到大排序*/ for(i=1;i<10;i++) /*外层循环元素的下标为 1~9,表示后9个数组元素*/ { for(j=9;j>=i;j--) /*内层循环元素的下标为 9~i,表示从最后一个元素开始向前循环*/ {