您的位置:首页 > 其它

排序算法--冒泡排序

2017-08-26 03:21 162 查看
冒泡排序:

冒泡排序(Bubble Sort)是一种简单的排序方法。基本思想就是通过相邻的元素之间的比较和交换,使冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。

算法实现:



1 public class BubbleSort {
2     /**
3      *
4      * 从小到大排序
5      */
6     public static void main(String args[]){
7         int array[] = {1 , 6 , 9 , 7 , 3 };
8         for(int i = 1 ; i < array.length; i++){
9             for(int j =0 ; j < array.length-i; j++){
10                 if(array[j] > array[j+1]){
11                     int temp = array[j]; //中间变量
12                     array[j] =array[j+1]; //交换位置
13                     array[j+1] = temp;
14                 }
15             }
16             System.out.print("第"+i+"次排序的结果: \t");
17             for(int j = 0 ; j < array.length; j++){
18                 System.out.print(array[j] +"\t");
19             }
20            System.out.println("");
21         }
22         System.out.println("冒泡排序后的结果:");
23         for(int i = 0 ; i < array.length; i++){
24             System.out.print(array[i] +"\t" );
25     }
26   }
27 }






算法分析:

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C

和记录移动次数M均达到最小值:C=n-1,M=0

所以,冒泡排序最好的时间复杂度为0(n)。

由上面代码可知,其外层循环执行 n-1次。内层循环最多的时候执行n次,最少的时候执行1次,平均执行
(n+1)/2
次。
所以循环体内的比较交换约执行
(n - 1)(n + 1) / 2 = (n^2 - 1)/2
(其中
n^2
是仿照Latex中的记法,表示n的平方)。按照计算复杂度的原则,去掉常数,去掉最高项系数,其复杂度为
O(n^2)


算法稳定性:

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: