排序算法之冒泡排序(C语言)

我们采用传统的三段式思维来学习:是什么?为什么?怎么做?

是什么?(摘自百度百科)

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。


冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

举个栗子:

4 2 3 1 5

第一轮比较:
(1)   4 和 2比,4>2,它们交换位置       结果:2 4 3 1 5

(2)   4和 3 比,4>3,它们交换位置        结果:2 3 4 1 5
(3)4 和 1 比,4>1,它们交换位置        结果:2 3 1 4 5

(4)4和 5 比,4<5,不交换位置             结果:2 3 1 4 5

到此第一轮就比较完了。第一轮的结果是找到了序列中最大的那个数,并浮到了最右边。

比较时,每轮中第 n 次比较是新序列中第 n 个元素和第 n+1 个元素的比较(假如 n 从 1 开始)。

第二轮比较:
(1) 2和3比,2<3,不交换位置             结果:2 3 1 4 5
(2) 3 和1比,3>1,它们交换位置        结果:2 1 3 4 5

(3)3和4比,3<4,不交换位置                 结果:2 1 3 4 5

到此第二轮就比较完了。第二轮的结果是找到了序列中第二大的那个数,并浮到了最右边第二个位置。

第三轮比较:
(1)2和1比,2>1,它们交换位置      结果:1 2 3 4 5

(2)2和3比,2<3,不交换位置          结果:1 2 3 4 5

到此第三轮就比较完了。第三轮的结果是找到了序列中第三大的那个数,并浮到了最右边第三个位置。

第四轮比较:
(1)1和2比,1<2,不交换位置          结果:1 2 3 4 5

至此,我们就比较完了。结果是1 2 3 4 5。

总结:

n 个数据,只需要比较 n–1 轮。因为每轮我们都把最大的数排到了最后边,所以每轮都会比较少一个数。

下面写一个程序:

#include <stdio.h>
//冒泡排序//
int main()
{
    int a[]={12,43,1,3,6,5,4,7,9,8};//这里要注意的是数组的下标是从0开始的
    int n=sizeof(a)/sizeof(a[0]);//存放数组a中元素的个数//
    int buf;
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if (a[j] < a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    for (int i=0; i<n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
输出结果是:43 12 9 8 7 6 5 4 3 1

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值