冒泡排序我的见解

 冒泡排序算法如下:
 int temp;
 int a[10]={3,45,10,5,68,32,8,9,0,50};
 int i,j;
 for(i=0;i<9;i++)
 for(j=0;j<9;j++)
       {
  if(a[i]>a[j+1])  
  {temp=a[i];         
   a[i]=a[j+1];          
   a[j+1]=temp;}         
 }
这个冒泡排序写的是有错误的
原因:每次排两三数之后会重新拍
如果把if里面的i换成j就可以了
我的理解,首先有10个数,一般排序是要进行9*9次
如果是9次,第一次循环9次是必须的,无论任何算法,关键在第二个循环
这就要看j的值了
当j等于零的时候,也就是第一个数3要与后面的9个数进行9次比较,如果从小到大那么在循环了9次之后就要把
最小的一个值放在最前面 紧接着进行第二次循环 这时10个数已经变成了9个
自然第二次循环就可以进行8次比较了,所以j的最大值可以减一
第一次
排出a[0]=0  剩下{3,45,10,5,68,32,8,9,50} 此时i等于1  j从0---8
此时我有一个疑问 下次排序还是从a[0]  理解成最小的值已经放到最前面 那后面的数咋排 哎 写出排序的流程吧
3,45,10,5,68,32,8,9,0,50
3,10,45,5,68,32,8,9,0,50
3,10,5,45,68,32,8,9,0,50
3,10,5,45,68,32,8,9,0,50
3,10,5,45,32,68,8,9,0,50
3,10,5,45,32,8,68,9,0,50
3,10,5,45,32,8,9,68,0,50
3,10,5,45,32,8,9,0,68,50
3,10,5,45,32,8,9,0,50,80
写到这里我的疑问消失了,原来在每次排序过后,最大的数值放到最后面了,所以j的值可以减1
从大到小也应该是这个道理吧 把最小的放到了 后面 实践检验整理 试下哈哈
45,3,10,5,68,32,8,9,0,50
45,10,3,5,68,32,8,9,0,50
45,10,5,3,68,32,8,9,0,50
45,10,5,68,3,32,8,9,0,50
45,10,5,68,32,3,8,9,0,50
45,10,5,68,32,8,3,9,0,50
45,10,5,68,32,8,9,3,0,50
45,10,5,68,32,8,9,3,0,50
45,10,5,68,32,8,9,3,50,0
正确
 for(i=0;i<9;i++)
 for(j=0;j<9-i;j++)
    {
  if(a[j]<a[j+1])
  {temp=a[j];
   a[j]=a[j+1];
   a[j+1]=temp;}
 }

世上无难事,只怕无心人。偶也

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值