前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学C语言(26):冒泡排序

小朋友学C语言(26):冒泡排序

作者头像
海天一树
发布2018-04-17 12:31:12
1.1K0
发布2018-04-17 12:31:12
举报
文章被收录于专栏:海天一树海天一树

(一)基本原理(由小到大):

将相邻两个数比较,将大的调到后头。如果有n个数,则要进行n-1趟比较。

在第1趟中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

上图中有5个数,要进行5 - 1 = 4趟比较。 第1趟,要进行n - 1 = 4次两两比较; 第2趟,要进行5 - 2 = 3次两两比较; 第3趟,要进行5 - 3 = 2次两两比较; 第4趟,要进行5 - 4 = 1次两两比较。

(二)代码实现

1 C语言实现

代码语言:javascript
复制
#include <stdio.h>
// 打印数组,方便观察结果
void print_array(int a[], int n)
{
    for(int i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}
// 冒泡排序算法
void bubble_sort(int a[], int n)
{
    // j表示第几轮比较
    for(int j = 0; j < n - 1; j++)
    {
        // i表示待比较的第几个元素
        for(int i = 0; i < n - 1 - j; i++)
        {
            if(a[i] > a[i+1])
            {
                a[i] ^= a[i+1];
                a[i+1] ^= a[i];
                a[i] ^= a[i+1];
            }
            // 打印每一轮比较,每次交换后的结果
            print_array(a, n);
        } 
        printf("********************\n");
    }
} 
int main ()
{
    int a[] = {5, 4, 3, 2, 1};
    int count = sizeof(a) / sizeof(int); // 求数组元素个数
    bubble_sort(a, count);
    return 0;
}

分析: bubble_sort函数中,有两层循环。外层用j来自增,内层用i来自增。 外层的循环自增的慢,内层的循环自增的快。 内层的循环i要都自增完,外层的j才会自加1。

执行过程为: j = 0, i = 0, if(a[0] > a[1])为真,a[0]与a[1]交换,数组变为{4,5,3,2,1} j = 0, i = 1, if(a[1] > a[2])为真,a[1]与a[2]交换,数组变为{4,3,5,2,1} j = 0, i = 2, if为真,a[2]与a[3]交换,数组变为{4, 3, 2, 5, 1} j = 0, i = 3, if为真,a[3]与a[4]交换,数组变为{4, 3, 2, 1, 5}, 此时最大的5已经挪到最后的位置,接下来5就不用再处理。

j = 1, i = 0, if为真,a[0]与a[1]交换,数组变为{3, 4, 2, 1, 5} j = 1, i = 1, if为真,a[1]与a[2]交换,数组变为{3, 2, 4, 1, 5} j = 1, i = 2, if为真,a[2]与a[3]交换,数组变为{3, 2, 1, 4, 5}, 此时4已经挪到倒数第二个位置,接下来4和5就不用再处理。

j = 2, i = 0, if为真,a[0]与a[1]交换,数组变为{2, 3, 1, 4, 5} j = 2, i = 1, if为真,a[1]与a[2]交换,数组变为{2, 1, 3, 4, 5}, 此时3已经挪到倒数第三个位置,接下来3、4和5就不用再处理。

j = 3, i = 0, if为真,a[0]与a[1]交换,数组变为{1, 2, 3, 4, 5}, 此时2已经挪到倒数第四个位置,接下来2、3、4和5就不用再处理。 剩余一个数1,也不用交换了。至此排序完毕。

输出结果:

代码语言:javascript
复制
4 5 3 2 1 
4 3 5 2 1 
4 3 2 5 1 
4 3 2 1 5 
********************
3 4 2 1 5 
3 2 4 1 5 
3 2 1 4 5 
********************
2 3 1 4 5 
2 1 3 4 5 
********************
1 2 3 4 5 
********************

(三)作业

1 编写程序并运行出正确结果 2 断点调试 3 默写

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天一树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)基本原理(由小到大):
  • (二)代码实现
  • (三)作业
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档