冒泡排序法


下面我们一起来看看排序中的冒泡排序法。

💡[例]有5个数字,要求对它们按由小到大的顺序排列。

这种问题称为数的排序(sort)。排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小。可以把这个题目抽象为一般形式“对n个数按升序排序”。

排序方法是一种重要的、基本的算法。排序的方法很多,这道题我们用冒泡法排序。

冒泡法的基本思路

冒泡法的基本思路是:每次将相邻两个数比较,将小的调到前面。若有5个数: 9,8,5,2,0,第1次先将最前面的两个数8和9对调。第2次将第2和第3个数(9和5)对调…如此共进行4次,得到8-5-2-0-9的顺序,可以看到:最大的数9已“沉底”,成为最下面一个数,而小的数“上升”。最小的数0已向上“浮起”一个位置。经过第1(共4比较与交换)后,已得到最大的数9。

image-20210818115526522

然后进行第2趟比较,对剩下的前面4个数(8,5,2,0)进行新一轮的比较,使第二大的数“沉底”。同样按照上面方法进行第2趟比较。经过这一趟3次比较与交换,得到次大的数8.

image-20210818115641108

按此规律进行下去,可以推知,对5个数需要比较4趟,才能使5个数按从小到大排列。在第1趟中要进行两个数之间的比较共4次,在第2趟过程中比较3次…第4趟只须比较1次。

思路总结

总结一下:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第i趟比较中要进行n-i次两两比较。

具体冒泡的方式:用相邻的两个元素进行比较,前一个大于后一个元素时,交换着两个数据,依次直到数组的末尾。

程序实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void BubbleSort(int , int );//函数声明
int main()
{
    int array[100] ;
    int i;
    printf("请输入5个数字:");
    for (i = 0; i < 5; i++)
    {
        scanf("%d", &array[i]);
    }
        
	BubbleSort(array, 5);//调用函数
    printf("排序后为:");
    for (i = 0; i < 5; i++)
    {
        printf("%d ", array[i]);//排序后输出
    }
    return 0;
}
//冒泡排序
void BubbleSort(int array[], int size)
{
    // 外层循环控制冒泡排序的趟数
    // size-1表示:最后一趟区间中只剩余1个元素,该趟冒泡可以省略
    for (int i = 0; i < size - 1; i++)
    {
        // 具体冒泡的方式:用相邻的两个元素进行比较,前一个大于后一个元素时,交换着两个数据,依次直到数组的末尾
        for (int j = 1; j < size - i; j++)
        {
            if (array[j - 1] > array[j])
            {
                int temp = array[j - 1];
                array[j - 1] = array[j];
                array[j] = temp;
            }
        }
    }
}

运行一下看看
在这里插入图片描述
是我们想要的效果啦!

以上就是我总结的冒泡排序法。
如有不足之处,欢迎指正。
如果对你有帮助,那就动动你的手指,给我点个赞👍吧!
主页还有其他文章,欢迎学习指正。
关注我,让我们一起学习一起成长吧!请添加图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐