c++排序算法——冒泡排序

前一章讲过的简单桶排序有很多缺陷,它只能给整数排序,对付浮点数就无能为力了。如果想对像3.5,  5.66, 7.43, 6.9 这些小数排序,可以用冒泡排序法(bubble sort)。冒泡排序法的基本思想是:每次比较两个相邻的元素,如果顺序错误就交换它们的位置。

例如我们对66 77 99 100 101 45 这6个数按从大到小的顺序排序,也就是越小的数越靠后(好像这是一句废话),但这是很重要的一句话。现在开始排序,66比77小,所以交换位置,此时顺序是7766 99 100 101 45,继续比较66比99小,所以交换位置77 9966 100 101 45,一次类推知道比较到77 99 100 10166 45,这时66比45大,所以无需交换。第一轮排序结束,把数列中最小的数放到了队尾。第二轮排序又是从第一个元素开始按照同样的规律吧第二小的数向后移,只到进行到第n-1轮。为什么n个数只执行n-1轮呢?你想啊,执行完n-1轮的时候除了第n个数还没归位,其他都已经跟别人比过并找到适合自己的位置了。所以最后一轮就没有必要进行了。

下面贴出c++源码:

#include <iostream>

using namespace std;
 int main()
 {
     int i,j,n,a[100],tmp;
     cin >> n;
     for(i=0;i<n;i++)
     {
         cin >> a[i];
     }
     for(i=1;i<=n-1;i++) //此处i不能为赋0;否则第0次循环时内循环a[j+1]会溢出
        {
         for(j=0;j<n-i;j++)
         {
             if(a[j]<a[j+1])
             {
               tmp = a[j];
               a[j] = a[j+1];
               a[j+1] = tmp;
              }
         }
        }
     for(i=0;i<n;i++)
     {
         cout << a[i] << " ";
     }
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值