冒泡排序:
冒泡排序(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+"次排序的结果: "); 17 for(int j = 0 ; j < array.length; j++){ 18 System.out.print(array[j] +" "); 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] +" " ); 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)
算法稳定性:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。