爱问知识人 爱问教育 医院库

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

首页

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


        

提交回答

全部答案

    2018-05-17 04:43:43
  •   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]  

    王***

    2018-05-17 04:43:43

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 174-193
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):