【笔记】冒泡排序

  冒泡排序是最简单的交换排序方法。

  基本算法思想:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序( L.r[1].key>L.r[2].key ),则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。上述过程称为第一趟冒泡过程,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二趟冒泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。一般地,第i趟冒泡排序是从 L.r[1] L.r[ni+1] 依次比较相邻李娜改革记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。

  整个排序过程需进行k( 1k<n )趟冒泡排序,显然判别冒泡排序结束的条件应该是在一趟排序过程中没有进行过交换记录的操作。右下图可见,在冒泡排序的过程中,关键字较小的记录好比水中气泡逐趟向上漂浮,而关键字较大的记录好比石块往下沉,每一趟有一块“最大”的石头沉到水底。


这里写图片描述

  • 实现源码
 #define TRUE 1
 #define FALSE 0
 #define N 8
 typedef int Status;
 void bubble_sort(int a[],int n)
 { /* 将a中整数序列重新排列成自小至大有序的整数序列 */
   int i,j,t;
   Status change;
   for(i=n-1,change=TRUE;i>1&&change;--i)
   {
     change=FALSE;
     for(j=0;j<i;++j)
       if(a[j]>a[j+1])
       {
         t=a[j];
         a[j]=a[j+1];
         a[j+1]=t;
         change=TRUE;
       }
   }
 }

 void print(int r[],int n)
 {
   int i;
   for(i=0;i<n;i++)
     printf("%d ",r[i]);
   printf("\n");
 }

 void main()
 {
   int d[N]={49,38,65,97,76,13,27,49};
   printf("排序前:\n");
   print(d,N);
   bubble_sort(d,N);
   printf("排序后:\n");
   print(d,N);
 }
  • 测试结果

    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值