c语言---冒泡排序(循环及数组的应用)

冒泡排列的作用

冒泡排序的作用就是把一串无序排列的数字转化为有序排列的数字!

冒泡排序原理

我们先来讲解一下冒泡排序的原理

先请不了解冒泡排序的同学花几分钟时间看下这张动图:
在这里插入图片描述
上图就是接下来我要讲解的升序
升序:就是按照从左到右依次增大的顺序对一组无序数列进行有序排列。

例如下面五个无序排列的数字:

12   -23    15    4    7

如果要将这五个数字按照升序有序排列
那先要进行的是将相邻的的数字依次两两比较

第一轮比较:
12 > -23

则12 、-23互换位置
得到如下顺序:

-23  12  15  4  7

继续比较

12 < 15

此步较大的数15本来就在高位上,则数字位置不变,
继续比较,比较 上一步中较大的数

15 > 4

则有

-23  12  4  15  7

继续比较

15>7

变成

-23  12  4  7  15

这时我们发现这组无序数字中最大的数15,到达最右边的位置,即到达最高位

第二轮比较:
-23 < 12    //位置不变
12 > 4

变为

-23  4  12  7  15

继续比较

12 > 7   
变为:
-23  4  7  12  15

可以发现,此时得到一组为升序的有序数列,不需要继续比较,否则继续进行下一轮比较
以上就是冒泡序列的进程原理,可以试着通过原理将代码打出来

大家可以发现它的原理只是重复执行一个命令(就是不断比较大小,互换位置)
我们接下来用代码来运行一下

#include <stdio.h>
int main(int argc, const char * argv[])
{
    int a[] = {12,-23,15,4,7};
    int n;  //存放数组a中元素的个数
    int i;  //比较的轮数
    int j; //每轮比较的次数
    int buf;   //交换数据时用于存放中间数据
    n =sizeof(a[n]);  /*sizeof即输出后面数组a[n]的容量(数字个数)*/
    for (i=0; i<=n-1; ++i)  //两两进行比较,需要比较n-1轮
    {
        for (j=0; j<n-i; ++j)  /*每轮比较n-i次,意为每次排序后不用去管已经排完的数了,就是n-i*/
        {
            if (a[j] > a[j+1])   //如果数组中第j项大于第j+1项,进行if运算
            {
                buf = a[j];    //将a[j]数列赋给buf
                a[j] = a[j+1];  //将a[j+1]数列赋给a[j]
                a[j+1] = buf;  //将buf赋给a[j+1]
            }
        }
    }
    for (i=0; i<=n; ++i)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}

运行结果如下:
在这里插入图片描述
可以看见成功运行,并按照升序排列

有的同学可能会对下面这段代码有些疑问

这里也正是完成置换的关键所在

if (a[j] > a[j+1])   //如果数组中第j项大于第j+1项,进行if运算
            {
                buf = a[j];    //将a[j]数列赋给buf
                a[j] = a[j+1];  //将a[j+1]数列赋给a[j]
                a[j+1] = buf;  //将buf赋给a[j+1]
            }

这段代码其实就是将数值交换位置的过程代码
我们来细讲一下:

if (a[j] > a[j+1])   

这个意思就是,如果第 j 个数大于第 j+1 个数
换个说法就是,如果第 j 个数大于它右边(升序中)那个数

{
	buf = a[j];    
	a[j] = a[j+1]; 
	a[j+1] = buf;
} 

上面这段代码意思就是将数组中的第 j 项存于 buf 中,而将第 j+1 项换到第 j 项上,再将 buf 置换到第j+1项,也就是数组中的第 j 项换到第j+1项上去。
以上就是大小值置换的过程!

1.大家也不妨试着改成降序的方式来排列这串无序数组,即从左到右依次减小的顺序
2.大家也可以将这个代码改为动态代码,比如说自己可以随便定义数组(就是在代码的原基础上增加 scanf )的值并求顺序,使这段固定的代码可以拥有计算器的功能

发布了7 篇原创文章 · 获赞 3 · 访问量 3418

猜你喜欢

转载自blog.csdn.net/Cool_breeze_bin/article/details/103238120