冒泡排序:

 

◆ 实例: 农民选种子的时候 会把所有的种子放到水里, 颗粒饱满的下沉 ,颗粒不饱满的漂到上面 这类似于一种冒泡排序。

 

 

◆ 特点:1:每次只能比相邻的两个元素 

               (a[i] < a[i+1])相比

                 2:如果顺序不合适就交换


 ☞: 适合少量数据的情况,如果乱序 数据量大 最好不要用

 

 

算法描述:

   1:一轮比较所有相邻数据,如果顺序不对就发生交换;  => for(`````````````)

  

   2本轮只要发生了交换、 就再来一轮 如果没有发生交换排序成功。   =>先做后判断 所以适合do while

 

  3:  算法优化,每次可以少比较一个  比较的个数减一:

 

◆:代码:

 

  1. #include <iostream> 
  2. #include <ctime> 
  3. using namespace  std; 
  4. //算出运算所用事件 
  5.  
  6. //定义 BubbleSort 方法   
  7. typedef  int    T; 
  8. void    BubbleSort (T*  arr, int num) 
  9.      //比较一组数据 如果出现了交换 则继续排序  直到没有出现则表示排序成功 
  10.         //=> do while循环 
  11. //定义标记 每一次循环的比较 
  12.         bool    bDoSwap = false;  // 
  13.     do { 
  14.         bDoSwap = false//每次循环设置默认为没有发生交换 
  15.         //循环遍历 
  16.         for ( int i =0; i<num-1; i++) 
  17.         { 
  18.             //大的后移 
  19.             if(arr[i] > arr[i+1]) { 
  20.                 swap(arr[i], arr[i+1]); 
  21.                 //修改标记 
  22.                 bDoSwap = true
  23.             } 
  24.         } 
  25.         //算法优化  令num - 1  因为每次比较结束后  最后一个是最大的 所以最后一个无需再次比较 
  26.          num--; 
  27.     }while(bDoSwap); 
  28.      
  29.  
  30. int main() 
  31.     cout << "冒泡排序:"<<endl; 
  32.  //定义102400长度的数组 越长越能计算所需世间   赋值 
  33.     const int kNum = 10240; 
  34.     T arr[kNum]; 
  35.     for (int i=0; i<kNum; i++) 
  36.     { 
  37.         arr[i] = kNum - i; 
  38.     } 
  39.     time_t tStart = time(NULL); 
  40.     BubbleSort(arr, kNum); 
  41.     time_t tEnd = time(NULL); 
  42.      
  43.     cout<<"require time:"<<tEnd-tStart <<endl; 
  44.     //打印前十个看看是否完成排序 
  45.     for(int i =0; i<10; i++) 
  46.     { 
  47.         cout<<arr[i]<<"     "
  48.     } 
  49.     system("pause"); 
  50.     return 0; 
  51.  

 

结果: