冒泡排序法

来源:互联网 发布:沐沐是什么软件 编辑:程序博客网 时间:2024/06/03 15:40

思想:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

void swap(int a[], int n){            //一个有n个元素的数据排序    for(int i =0 ; i< n-1; ++i) {         // n个数组元素需要循环比较n-1次        for(int j = 0; j < n-i-1; ++j) {    // 每一次排序都比上次循环排序少一次            if(a[j] > a[j+1])              {                  int tmp = a[j] ; a[j] = a[j+1] ;  a[j+1] = tmp;              }          }      }  }  
改进:在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) ,从而使排序趟数几乎减少了一半。
void Bubble_2 ( int r[], int n){      int low = 0;       int high= n -1; //设置变量的初始值      int temp,j;      while (low < high) {          for (j= low; j< high; ++j) //正向冒泡,找到最大者              if (r[j]> r[j+1]) {                  temp = 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]) {                  temp = r[j]; r[j]=r[j-1];r[j-1]=temp;              }          ++low;                  //修改low值,后移一位      }   }