C语言冒泡排序法详解?
第一讲:冒泡排序法基本原理
所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。一般地,如果有N个数需要排序,则需要进行(N-1)趟起泡,我们以从小到大排序为例来看一下,具体情况如下图所示:
第二讲:C语言程序的实现
首先,为了实现效果,我们得先定义一组待排序的数列以及各个变量。具体情况如下图:
2.算法的实现,具体情况如图:
3.运行结果显示。具体情况如图:
第三讲:在上一讲的基础上对程序算法进行优化
按照上面的程序,在第五趟(i=5)起泡时,计算机不仅要对“1,5,6,4”两两进行比较并排序,还要对“7,8,9,13”进行两两比较并排序,而“7,8,9,13”在第四趟起泡时就已经排序好了,所以再进行比较的话,就显得非常多余。图示如下:
2.在上面程序的基础上进行优化。具体情况如图所示:
3.优化后的输出结果。如图所示:
C语言中什么叫气泡法排序?
冒泡法排序是C语言中较简单的排序算法。
定义:它重复地走访过要排序的元素列,依次比较两个相邻的元素,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。如此反复,直到没有可以交换的元素,(即从小到大排序好)。
思路:
有n个数,每轮替换一个数,假设最大的数在第一个,则一共需要替换n-1轮;此时最大数已经在最下面,
所以第二轮替换少一轮,以此类推;
在函数和数组中
/*对输入的数进行从小到大排序*/
#include <stdio.h>
void Bubble(int foam[]);//冒泡排序
int main()
{
int froth[10];
int i;
for(i=0;i<=9;i++)//动态赋值
{
scanf("%d",&froth[i]);
}
Bubble(froth);//数组址传递
return 0;
}
void Bubble(int foam[])
{
int t;
int j,k;
for(j=0;j<9;j++)//进行9轮循环
{
for(k=0;k<9-j;k++)//减去循环的轮数
{
if(foam[k]>foam[k+1])//假设前面的数大于后面的数,如果真,则替换;
{
t = foam[k];
foam[k] = foam[k+1];
foam[k+1] = t;
是用C语言实现如下功能:从键盘输入8个整数,使用冒泡排序法把他们升序输出?
#include <stdio.h>
int main()
{
int a[6],i,j;
printf("请输入6个数字:\n");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)//冒泡。
{
for(j=0;j<5-i;j++)
{
if(a[j]<a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("冒泡排序后:\n");
for(i=0;i<6;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}