冒泡排序

冒泡排序是一种简单的快速排序。
基本思路:对一个有n个元素的数列进行排序。进行k趟排序,每一趟找出数列中最大的关键字(最简单的交换方式),并将这个最大的关键字放在这一趟排序所遍历的最后一个位置上。其中要注意的是冒泡排序结束的条件是:在一趟排序过程中没有进行交换记录的操作。所以k值是由实际的序列来决定的。


例如:对序列49,38,65,97,76,13,27,49,55,4 进行起泡排序过程如下:
              第1趟:38 49 65 76 13 27 49 55 4 97
              第2趟:38 49 65 13 27 49 55 4 76 97
              第3趟:38 49 13 27 49 55 4 65 76 97
              第4趟:38 13 27 49 49 4 55 65 76 97
              第5趟:13 27 38 49 4 49 55 65 76 97
              第6趟:13 27 38 4 49 49 55 65 76 97
              第7趟:13 27 4 38 49 49 55 65 76 97
              第8趟:13 4 27 38 49 49 55 65 76 97
              第9趟:4 13 27 38 49 49 55 65 76 97
            第10趟:4 13 27 38 49 49 55 65 76 97

具体实现如下:

 

 

 

[java] view plaincopy
 
  1. package Sort;  
  2. /* 
  3.  * 冒泡排序。注意两个循环的边界条件! 
  4.  * 冒泡排序结束的条件应该是"在一趟排序过程中没有进行交换记录的操作!" 
  5.  */  
  6. public class BubbleSort {  
  7.     private int[] array ;  
  8.       
  9.     public BubbleSort(int[] array)  
  10.     {  
  11.         this.array = new int[array.length];  
  12.         this.array = array;  
  13.     }  
  14.       
  15.     public void bubbleSort()  
  16.     {  
  17.         for(int i =0;i<array.length;i++)                       //i表示已经走过的趟数  
  18.         {  
  19.               
  20.             for(int j=1;j<array.length-i;j++)                 //每趟要访问哪些元素  
  21.             {  
  22.                 if(array[j-1]>array[j])  
  23.                 {  
  24.                     int tmp = array[j];  
  25.                     array[j] = array[j-1];  
  26.                     array[j-1] = tmp;  
  27.                       
  28.                 }  
  29.                               
  30.             }  
  31.             for(int t=0;t<array.length;t++)  
  32.             {  
  33.                 System.out.print(array[t]+"     ");  
  34.             }  
  35.             System.out.println();  
  36.         }  
  37.     }  
  38.       
  39.     public void bubbleSort_better()  
  40.     {  
  41.         int count = -1;  
  42.         for(int i =0;count!=0;i++)                      //i表示已经走过的趟数;count表示交换次数为0就表示序列已排序好了。  
  43.         {  
  44.             count=0;  
  45.             for(int j=1;j<array.length-i;j++)          //每趟要访问哪些元素  
  46.             {  
  47.                 if(array[j-1]>array[j])  
  48.                 {  
  49.                     int tmp = array[j];  
  50.                     array[j] = array[j-1];  
  51.                     array[j-1] = tmp;  
  52.                     count++;  
  53.                 }  
  54.                               
  55.             }  
  56.             for(int t=0;t<array.length;t++)  
  57.             {  
  58.                 System.out.print(array[t]+"     ");  
  59.             }  
  60.             System.out.println();  
  61.         }  
  62.     }  
  63.       
  64.     public static void main(String args[])  
  65.     {  
  66.         int[] array = {49,38,65,97,76,13,27,49,55,4};  
  67.         int[] array2 = {23,24,25,26,27,28};  
  68.         BubbleSort bubblesortList = new BubbleSort(array2);  
  69.         bubblesortList.bubbleSort_better();  
  70.     }  

 

 

bubbleSort(),bubbleSort_better();上面代码中的这两个方法,均是冒泡排序的算法,不同的是前者要经过n趟排序;而后者的排序趟数是标记在一趟排序过程中没有进行交换记录的操作的count决定的。用在一趟排序过程中没有进行交换记录的操作作为循环结束的条件是合理:因为若一个数列本来就是一个有序数列,或者说只需要进行一两次的排序就能达到有序数列目的的时候,bubbleSort()仍然需要经过n趟排序,而bubbleSort_better()的趟数肯定是要小于n的。

冒泡排序的时间复杂度为O(n2).

转自 http://blog.csdn.net/pigli/article/details/5747192

posted @ 2014-06-13 02:11  princessd8251  阅读(132)  评论(0)    收藏  举报