冒泡排序法

来源:互联网 发布:java工程师的岗位要求 编辑:程序博客网 时间:2024/06/06 03:05

原文地址:

http://blog.csdn.net/21aspnet/article/details/1534105?locationNum=16&fps=1



冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^ 2).


[cpp] view plain copy
  1. void  Swap( int   * a,  int   * b)  
  2.   {  
  3.      int  temp;  
  4.   
  5.     temp  =   * a;  
  6.      * a    =   * b;  
  7.      * b    =  temp;  
  8. }   
  9.    
  10.  //  冒泡排序   
  11.  void  BubbleSort( int  array[],  int  length)  
  12.   {  
  13.      //  记录一次遍历中是否有元素的交换   
  14.       bool  exchange;  
  15.      for  ( int  i  =   0 ; i  <  length;  ++ i)  
  16.       {  
  17.         exchange  =   false ;  
  18.          for  ( int  j  =  i  +   1 ; j  <  length;  ++ j)  
  19.           {  
  20.              if  (array[j]  <  array[i])  
  21.               {  
  22.                 exchange  =   true ;  
  23.                 Swap( & array[j],  & array[i]);  
  24.             }   
  25.         }   
  26.          //  如果这次遍历没有元素的交换,那么排序结束   
  27.           if  ( false   ==  exchange)  
  28.              break ;  
  29.     }   
  30. }   

 

从后往前版本

[cpp] view plain copy
  1. #include <stdio.h>;  
  2. void bubble_sort(int arr[],int  count);  
  3.   
  4.   
  5. void bubble_sort(int arr[],int  count)  
  6. {  
  7.     int i;int j;int temp;  
  8.     for(i=0;i<count;i++)  
  9.     {  
  10.         for(j=count-1;j>i;j--)  
  11.         {  
  12.             if(arr[j]<arr[j-1])  
  13.             {  
  14.             temp=arr[j];  
  15.             arr[j]=arr[j-1];  
  16.             arr[j-1]=temp;  
  17.             }  
  18.         }  
  19.     }  
  20. }  
  21.   
  22.   
  23. int main(void)  
  24. {  
  25.     int arr[]={1,5,2,4,3,8,6,7,9};  
  26.     int count=sizeof(arr)/sizeof(int);  
  27.       
  28.     bubble_sort(arr,count);  
  29.   
  30.     int k;  
  31.     for(k=0;k<count;k++)  
  32.     {  
  33.         printf("%d",arr[k]);  
  34.     }  
  35.     return 0;  
  36. }  


 


PHP版本

[php] view plain copy
  1. <?php  
  2.       $arr=array(1,5,2,4,3,8,6,7,9);  
  3.       print "排序前 ";  
  4.       print_r($arr);  
  5.       echo "<br>";  
  6.       $arr=bubble_sort($arr);  
  7.       print "排序后 ";  
  8.       print_r($arr);  
  9.         
  10.       function bubble_sort($array)  
  11.       {  
  12.           $count = count($array);  
  13.           $bool=true;$k=0;  
  14.           for($i=0;$i<$count;$i++)  
  15.           {  
  16.               for($j=$count-1;$j>$i;$j--)  
  17.               {  
  18.                   if($array[$j]<$array[$j-1])  
  19.                   {  
  20.                       $temp=$array[$j];  
  21.                       $array[$j]=$array[$j-1];  
  22.                       $array[$j-1]=$temp;  
  23.                       $bool=false;  
  24.                       $k++;  
  25.                   }  
  26.               }  
  27.               if($bool==true)  
  28.               {  
  29.                   break;  
  30.               }  
  31.           }  
  32.           echo "一共用了".$k."次<br>";  
  33.           return $array;  
  34.       }  
  35.     ?>  
原创粉丝点击