前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 C 实现冒泡排序

用 C 实现冒泡排序

作者头像
Reborn Lee
发布2020-06-29 11:50:01
4320
发布2020-06-29 11:50:01
举报
文章被收录于专栏:用户7494468的专栏


原理:

以 6 个数为例: 对 4 56 25 13 8 6 进行冒泡排序(1 与 2、 2 与3 、 3 与4 、4 与 5 、 5 与 6 比较, 即依次比较)


第一轮:

No.1:56 4 25 13 8 6

No.2:56 25 4 13 8 6

No.3:56 25 13 4 8 6

No.4:56 25 13 8 4 6

No.5:56 25 13 8 6 4 (最小)

通过第一轮可以看出通过 5 次比较可以找出来一个最小的数。


第二轮:

No.1:56 25 13 8 6

No.2:56 25 13 8 6

No.3:56 25 13 8 6

No.4:56 25 13 8 6 (最小)

由此可见,第二轮经过4次比较确定最小的一个数。


..................................

以下就不一 一比较,可以推理的是,每一轮确定一个最小值,那么6个数,需要5轮比较方能确定顺序。若n个数,则需要比较n - 1 轮才能确定数的顺序。

还可以推出,第一轮需要比较 5 次, 第二轮需要比较 4次,那么若有n个数,则第一轮需要比较n - 1次, 第二轮 比较 n - 2次。


重点:若用 i 表示第 i 轮, j 表示每轮比较 j 次,那么循环应该这么设计;

for ( i = 0 ; i < n - 1 ; i ++ )

{

for(j = 0 ; j < n - 1 - i ; j ++)

{

...............;

...............;

...............;

}

}



下面用一个简单的实际例子说明:

用c编写一个程序,从键盘读取10 个数字,对其用冒泡排序法进行排序;


程序:

/*

2017年10月27日17:31:59

功能:输入10个数,通过冒泡法对其进行排序。

*/

#include<stdio.h>

#include<stdlib.h>

#define NUM 10

int main()

{

int num = NUM;

int array[NUM];

int i, j;

int temp;

printf("Please enter %d integer numbers:", num);

for(i = 0; i < NUM; i ++)

{

scanf("%d", &array[i]);

}

//sort

for(i = 0; i < NUM - 1; i ++)

{

for(j = 0; j < NUM - 1 - i; j ++)

{

if(array[j] < array[j + 1])

{

temp = array[j];

array[j] = array[j + 1];

array[j + 1] = temp;

}

}

}

printf("The numbers after being sorted:\n");

for(i = 0; i < NUM; i ++)

{

printf("%d\t", array[i]);

if( (i + 1) % 5 == 0 ) //每行5个数字

{

printf("\n");

}

}

return 0;

}

/*

在Code::Blocks中的输出结果为:

Please enter 10 integer numbers:12 25 65 32 24 59 85 64 49 5

The numbers after being sorted:

85 65 64 59 49

32 25 24 12 5

2017年10月27日17:49:05

心得:冒泡排序的发明者一定智商很高,第一次提出对智力很是挑战。总之,要想明白冒泡排序的算法,必须明白其原理才行。

*/


上面的例子是用一个数组来存放10个数字。用最简单的编程方法去实现了冒泡排序,并没有用指针,以及动态地开辟内存空间去编写这个程序。一是觉得生

涩难懂;二是不一定能编地出来。



到此为止,接下来的专题就顺着这个专题来写吧,去认识其他的排序算法。这倒是比较有用。不会让人看了厌恶。什么预编译什么的,见鬼去吧,一次又记不住。哈哈哈

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

本文分享自 FPGA LAB 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档