C语言冒泡排序算法(附带源码)

排序(sorting)就是调整列表的顺序,是计算机编程中经常要做的一件事情。经过排序以后的数据,可以极大地提高查找的效率。

冒泡排序(bubble sort)是用嵌套的 for 循环来实现的,其名称来源于这种排序方法的特性。在排序过程中,每一轮循环都使得较小或较大的值“浮”到列表的最上端。图 1 演示了用冒泡排序法对 5 个数进行排序的过程。

冒泡排序(从大到小)
图 1:冒泡排序(从大到小)

随机生成 10 个 100 内的正整数,按从大到小的顺序输出。

问题分析

10 个正整数用 1+rand( )%99 随机生成。

整个排序过程用嵌套的 for 循环来完成。外层循环的循环次数为 9 次,设置排序位置,使得从第一个位置开始的每一个数都与其后面的所有数依次比较大小(内层循环);内层循环负责数的比较,并把不符合顺序的数字进行对换,其循环次数就是排序位置后面的数字的个数。

定义数组 nums[10] 存储 10 个数。如果外层循环设置处在排序位置 i 的元素是 nums[i],则其后的元素 nums[i+1]、nums[i+2]、…、nums[9] 都要与 nums[i] 在内层循环中进行比较,并把不符合顺序的数字进行对换。因而,内层循环的循环变量范围可以设置为 i+1~9。

算法描述

1) 定义外层循环控制变量 outer 和内层循环控制变量 inner;
2) 定义用于交换数值的临时变量 temp;
3) 定义数组 nums[10] 用于存储 10 个数;
4) 循环变量 i(0~9)控制循环为数组 nums 的元素赋值:获得一个 100 内的随机整数并赋值给数组元素 nums[i];输出数组元素 nums[i];
5) 循环变量 outer(0~8)控制外层循环,设置排序位置 outer:
       循环变量 inner(outer+1~9) 控制内层循环:
           如果 nums[inner] 的值大于排序位置的 nums[outer] 的值,则交换 nums[inner] 和 nums[outer] 的值:
               ① temp = nums[outer];
               ② nums[outer] = nums[inner];
               ③ nums[inner] = temp;
6) 循环变量 i(0~9)控制输出排序后的数组 nums 的所有元素:输出数组元素 nums[i];
7) 结束。

C语言代码清单 1:随机生成 10 个 100 内的正整数,按从大到小的顺序输出
#include <stdio.h>
#include <stdlib.h>
int main( )
{
    system("color 70");                         //设置显示屏前景色7和背景色0
    int i,inner,outer,temp;
    int nums[10];
    printf("排序前:");
    for(i=0;i<10;i++)                           //随机生成10个数并输出
    {
        nums[i]=1+rand()%99;
        printf("%d ",nums[i]);
    }
    for(outer=0;outer<9;outer++)                //外层循环
        for(inner=outer+1;inner<10;inner++)     //内层循环
        {
            if(nums[inner]>nums[outer])         //比较大小
            {
                temp=nums[outer];
                nums[outer]=nums[inner];
                nums[inner]=temp;
            }                                   //互换
        }
    printf("\n排序后:");
    for(i=0;i<10;i++)                           //输出排序后的数列
        printf("%d ",nums[i]);
    printf("\n");
    system("pause");
    return 0;
}

运行结果为:

排序前:42 54 98 68 63 83 94 55 35 12
排序后:98 94 83 68 63 55 54 42 35 12