本篇内容介绍了“怎么用C语言实现冒泡排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
原理:
以 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个数字。用最简单的编程方法去实现了冒泡排序,并没有用指针,以及动态地开辟内存空间去编写这个程序。一是觉得生
涩难懂;二是不一定能编地出来。
“怎么用C语言实现冒泡排序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。