冒泡排序

最近突然想研究下算法。嗯,最简单的应该是冒泡排序(BubbleSort)。

 

对一个数组进行冒泡排序,是把小的数往前排。这时应从数组最后一个数开始历遍。

 

而冒泡排序也叫下沉排序,是把大的数往后排,应从数组第一个数开始历遍。

 

以下沉排序为例,通过相邻元素的比较(Array[j]和Array[j+1]),第一次历遍可把最大的元素确定,即最后一个元素Array[n-1]。

第i次历遍,可把第i大元素确定,即Array[n-i]。

 

有点凌乱,其实学算法应该根据实例来分析的,最后再总结规律。下面是一可执行的排序类。

 

package algorithm;

 

public class BubbleSort
{
 //排序算法
 public static void bubbleSort(int[]array)
 {
  for(int i=0;i<array.length-1;i++)
  {
   for(int j=0;j<array.length-i-1;j++)
   {
    if(array[j]>array[j+1])
    {
     int temp=array[j];
     array[j]=array[j+1];
     array[j+1]=temp;
    }
   }
   printResult(i+1,array);
  }
 }
 
 //显示第i趟排序的结果
 public static void printResult(int times,int[]array)
 {
  System.out.print("第"+times+"趟排序:");
  for(int i=0;i<array.length;i++)
   System.out.print(array[i]+" ");
  System.out.println();
 }
 
 public static void main(String[]args)
 {
  int[] array = {4,7,5,3,9,0};
  BubbleSort.bubbleSort(array);
 }
}

 

结果如下:

第1趟排序:4 5 3 7 0 9
第2趟排序:4 3 5 0 7 9
第3趟排序:3 4 0 5 7 9
第4趟排序:3 0 4 5 7 9
第5趟排序:0 3 4 5 7 9

 

从以上打印结果可以看出,第1趟排序把最大数据9下沉到最后一位,第2趟排序把第二大数据7下沉到倒数第二位,第3趟排序把第三大数据5下沉到倒数第三位,可以此类推,第i趟排序把第i大数据下沉到倒数第i位。外循环需n-1趟。

 

假定数组有n位,外循环次数为n-1,对于第i次外循环,其内循环次数为n-i-1。因此,

总的循环次数为:(n-i-1)(i从0到n-2),为n(n-1)/2,故冒泡排序的时间复杂度为O(n^2)。

 

OK!Go to sleep .

 

 

posted on 2011-04-02 03:07  张大大123  阅读(91)  评论(0编辑  收藏  举报

导航