算法之交换排序——冒泡排序

    算法才是计算机的灵魂。今天我们就来讲解一下算法。

    交换排序,就是比较两个记录的键值大小,逆序则交换两个记录的位置。这样键值小的记录向前移动,键值大的记录向序列后部移动。今天,我们来讲解一下冒泡排序。

    冒泡排序,因每趟都有一个最大键值的记录沉到序列底部,与气泡从水中往上冒类似而得名。

    我们先来看一下冒泡排序的基本过程: 

初始键值序列    45  38  66  90  88  10  25  45

第一趟排序后    38  45  66  88  10  25  45  90

第二趟排序后    38  45  66  10  25  45 88  90

第三趟排序后    38  45  10  25  45  66  88  90

第四趟排序后    38  10  25  45  45  66  88  90

第五趟排序后    10  25  38  45  45  66  88  90

第六趟排序后    10  25  38  45  45  66  88  90

第七趟排序后    10  25  38  45  45  66  88  90


冒泡排序的算法如下:
void BubbleSort (List R,int n){  
    int i,j,temp,endsort;  
    for(i=1;i<=n-1;i++) //n为序列中记录的个数,循环控制排序的趟数为n-1  
     {  
        endsort=0; //每次排序前置endsort为0,排序中进行了交换则置为1,循环结束时检查endsort为0则终止循环  
        for(i=1;j<=n-j;j++) //循环控制每趟比较的次数,第j趟比较n-j次  
          { if(R[j].key>R[j+1].key) //比较相邻元素,若逆序则交换  
                {  temp=R[j];  
                   R[j]=R[j+1];  
                   R[j+1]=temp;  
                   endsort=1;  
                 }  
           }  
  
       if(endsort==0)  break;  
      }  
  
}  


冒泡排序是一种稳定的排序,时间复杂度在最坏情况和平均情况下都是O(N2),最好情况是O(N)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值