起泡排序(改进版)解题思想及其C语言实现

解题思想:假设待排序的数据都存放在数组 R[n] 中,并想象将数组垂直树立,每次将相邻的两个元素比较,把小的元素调到前面,一趟排序后,最大的元素已放到了数组最后(沉底),小的元素向前一个位置(上浮),按此规律进行下去,直到没有反序记录为止。
解题过程:
起泡排序是交换排序的一种,其基本方法是 : 设待排序元素列中元素的个数为 n ,首先比较下标为 n-2 n-1 个元素,如果发生逆序(及前一个大于后一个),则将这两个元素交换;
然后对下标为 n-3 n-2 的元素做同样的处理;重复此过程直到处理完下标为 0 1 的元素。这称之为一趟起泡,结果将最小的元素交换到待排序元素序列的第一个位置,其他元素也都向最终排序的方向移动。
当然在个别情形下,元素有可能在排序中途向相反的方向移动(两元素相等时,不稳定排序,如图一中的 25 25* )。这样最多做 n-1 趟起泡就能把所有元素排好序。
代码实现:
#include<stdio.h>
// 起泡排序
void BubbleSort (int r[],int n){
  int j,temp,bound,exchange =n-1;
 while(exchange!=0){
 bound=exchange;
 exchange=0;
 for(j=0;j< bound;j ++)
  if(r[j]>r[j+1])
  {
temp=r[j];r[j]=r[j+1];r[j+1]=temp;
 exchange=j;
 }
  }
}

int main(){

  int i;

  int r[]={50,13,55,97,27,38,49,65};

  printf("待排序数组为:\n");

  for(i=0;i<8;i++){

  printf("%4d",r[i]);

  }

  printf("\n");

  printf("起泡排序结果为:\n");

  BubbleSort(r,8);

  for(i=0;i<8;i++){

  printf("%4d",r[i]);

  }

  return 0;

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值