数据结构 冒泡排序文字与图示详解及冒泡编程例子

冒泡排序可以对一组数据进行从小到大或者从大到小进行排序

下面对数据从小到大的冒泡排序进行介绍:

图示:

小的数值在左面,大的数值在右面,就像水中冒泡一样,越来越大。

以4个数值5,3,6,2进行排序为例介绍


进行第一次排序

    首先将第一个数值与第二个数值进行比较,第一个数值为5,第二个数值为3,5>3,将5与3的位置交换,此时为3,5,6,2。然后进行第二个数值与第三个数值进行比较,此时第二个数值为5,第三个数值为6, 5<6,所以位置不用交换,此时为3,5,6,2.最后进行第三个数值与第四个数值的比较,第三个数值为6,第四个数值为2, 6>2,所以讲6和2的位置交换,此时为3,5,2,6。所以第一次排序找出了这组数据的最大值6。第一次排序结果:



进行第二次排序

    首先将第一个数值与第二个数值进行比较,第一个数值为3,第二个数值为5,3<5,所以不进行位置交换。此时为3,5,2,6。进行第二个数值为第三个数值进行比较,第二个数值为5,第二个数值为2, 5>2,所以进行位置交换。此时为3,2,5,6。因为6已确定是最大值,所以5与6不用进行比较,5可以确定为次最大值。第二次排序结果:


进行第三次排序

    将第一个数值与第二个数值进行比较,第一个数值为3,第二个数值为2,3>2,所以进行位置交换,此时为2,3,5,6。3与5不用进行比较,因为5已经被确定为次最大值。所以第三次排序结果为:


总结:1 若有n个数值,需要n-1次排序。此例中有4个数值,进行了3次排序。

    2 在第m次排序中,需要进行n-m次数值比较。例如此例中第一个排序需要进行4-1=3次数值比较。


下面为冒泡排序的程序,随机产生20个数值,然后对其20个数值进行排序。

#include <stdio.h>
#include <time.h>

//冒泡排序
void BubbleSort(int *pData, int count)
{
    int temp, i, j;
   
    for(i = 0; i < count-1; i++)  //需要进行排序的次数
    {
        for(j = 0; j < count-1-i; j++) //每次排序需要进行比较的次数
        {
            if(pData[j] > pData[j+1])  //进行数值交换
            {
                temp = pData[j];
                pData[j] = pData[j+1];
                pData[j+1] = temp;
            }
        }
    }    
}
int main()
{
    time_t timep;
    srand((int)time(&timep));
    int i;
    int Data[20] = {0};
    for(i = 0; i < 20; i++)
    {
        Data[i] = rand()%100+1;
    }
    
    BubbleSort(Data, 20);       //调用函数进行排序
    for(i = 0; i < 20; i++)         //打印排序好的数字
    {
        printf("%d ", Data[i]);
    }
    printf("\n");
    return 0;
}

运行结果:






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值