搜索
首页 电脑/网络 程序设计 C/C++

c语言冒泡排序有什么改进办法吗

全部回答

2018-05-17

5 0
    1.设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置。由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可。改进后算法如下:123456789101112void Bubble_1 ( int r[], int n) {      int i= n -1;  //初始时,最后位置保持不变      while ( i> 0) {           int pos= 0; //每趟开始时,无记录交换          for (int j= 0; j r[j 1]) {                  pos= j; //记录交换的位置                   int tmp = r[j]; r[j]=r[j 1];r[j 1]=tmp;              }           i= pos; //为下一趟排序作准备       }   }2.传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。
    改进后的算法实现为:1234567891011121314151617void Bubble_2 ( int r[], int n){      int low = 0;       int high= n -1; //设置变量的初始值      int tmp,j;      while (low  r[j 1]) {                  tmp = r[j]; r[j]=r[j 1];r[j 1]=tmp;              }           --high;                 //修改high值, 前移一位          for ( j=high; j>low; --j) //反向冒泡,找到最小者              if (r[j]<r[j-1]) {                  tmp = r[j]; r[j]=r[j-1];r[j-1]=tmp;              }           low;                  //修改low值,后移一位      }   }。
    。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报