注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲冒泡排序 -- C语言实现  

2012-08-05 21:51:36|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

思路:

① 将相邻的两个数比较,将较小的数调到前头,有n个数就要进行n-1趟比较,小的数像泡泡一样冒上来一趟一趟逐渐冒到最前边;

② 第一次比较中要进行n-1次两两比较,结果是数组中最大的那个数落入水底,第二次比较时就不用算最后那个在水底的数了;

③ 在第i趟比较中,要进行n-1-i次两两比较。因为i个大的数已经自水底往上排序好了,剩下n-i个数,共需要n-i-1次两两比较;

冒泡法对于已经排好序的部分是不再访问的。

 

#include <stdio.h>
#include <stdlib.h>

void swap(int *p1,int *p2);   // 先声明的目的是防止和其他同名函数冲突, 另外注意swap函数只能这么写
void bubble_sort(int *a,int n);


void bubble_sort(int *a,int n)
{
  int i,j;
  for(i=0;i<n-1;i++) // 有n个数,冒泡排序要冒n-1次泡泡才能把最后的那个最小的数冒到水面, 0 ... n - 2恰好n - 1个数
  {
  for(j=0;j<n-1-i;j++) //  冒泡法对于已经排好序的i个数是不再访问的,故 j<n-1-i
  {
    if(a[j]>a[j+1])  //注意如果a[j]为最大的数则会一直往后跑,直到沉入"水底"
    {
    swap(&a[j],&a[j+1]);  // 注意形参要传指针哦
     }
  }
  }
}

void swap(int *p1,int *p2)
{
 int temp;
 temp=*p1;
 *p1=*p2;
 *p2=temp;
}

/*main 函数*/

int main()
{
   int i;
   int len;

   int array[]={12,278,85,24,18,69,58,21,175,28,1};  // 故意将最小的数放在最后,提醒大家第一趟最小的数是冒不到水面上来的
   len = sizeof( array ) / sizeof( *array );
   printf("排序前数组序列:\n");
   for(i=0;i<len;i++)
   {
      printf("%5d",array[i]);
   }
  
   printf("\n排序前数组序列:\n");
   bubble_sort(array,len);
   for(i=0;i<len;i++)
   {
      printf("%5d",array[i]);
   }
  
   getchar();
  
}

  评论这张
 
阅读(453)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016