冒泡排序法:关键字较小的记录好比气泡逐趟上浮,关键字较大的记录好比石块下沉,每趟有一块最大的石块沉底。
算法本质:(最大值是关键点,肯定放到最后了,如此循环)每次都从第一位向后滚动比较,使最大值沉底,最小值上升一次,最后一位向前推进(即最后一位刚确定的最大值不再参加比较,比较次数减1)
复杂度: 时间复杂度 O(n2) ,空间复杂度O(1)
3、java实现
1 package com.sort; 2 3 //稳定 4 public class 冒泡排序 { 5 public static void main(String[] args) { 6 int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8}; 7 System.out.println("排序之前:"); 8 for (int i = 0; i < a.length; i++) { 9 System.out.print(a+" ");10 }11 //冒泡排序12 for (int i = 0; i < a.length; i++) {13 for(int j = 0; j<a.length-i-1; j++){14 //这里-i主要是每遍历一次都把最大的i个数沉到最底下去了,没有必要再替换了15 if(a[j]>a[j+1]){16 int temp = a[j];17 a[j] = a[j+1];18 a[j+1] = temp;19 }20 }21 }22 System.out.println();23 System.out.println("排序之后:");24 for (int i = 0; i < a.length; i++) {25 System.out.print(a+" ");26 }27 }28 }假如数组是:int []nums = {5,4,3,2,1};
每一轮比较后的输出如下:
(1) 4,3,2,1,5,
(2) 3,2,1,4,5,
(3) 2,1,3,4,5,
(4) 1,2,3,4,5,
(5) 1,2,3,4,5,
4、分析
冒泡排序是一种稳定的排序方法。
•若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是O(n)
•若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值∶O(n2)
•起泡排序平均时间复杂度为O(n2)
|
|