Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4523293
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-09-24 12:46:58

         排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
  用实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

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

  3. void bubble_sort(int *array,int n)
  4. {
  5.     int i,j,tmp;
  6.     for(i=0;i<n-1;i++)
  7.     {
  8.         for(j=0;j<n-i-1;j++)
  9.         {
  10.             if(array[j]>array[j+1])
  11.             {
  12.                 tmp = array[j];
  13.                 array[j]=array[j+1];
  14.                 array[j+1]=tmp;
  15.             }
  16.         }
  17.     }
  18. }

  19. int main(void)
  20. {
  21.     int num[]={8,10,3,7,4};
  22.     int i = 0;
  23.     for(i=0;i<5;i++)
  24.         printf("%d ",num[i]);
  25.     printf("\n");

  26.     bubble_sort(num,5);
  27.     for(i=0;i<5;i++)
  28.         printf("%d ",num[i]);
  29.     printf("\n");

  30.     exit(EXIT_SUCCESS);
  31. }

  1. ywx@ywx:~/Desktop/yu/bishi$ ./bubble
  2. 8 10 3 7 4
  3. 3 4 7 8 10


阅读(1829) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~