冒泡排序

冒泡排序(下沉排序):因为较小的值逐渐想数组顶部(即第一个元素)冒上来,就像水中的水泡一样,而同时,较大的值会沉入数组底部。

实现:使用嵌套的循环对整个数组进行数次遍历,每次遍历都要比较数组中相邻的两个元素,如果前者大于后者,交换位置,否则,不变。

代码:

private static void fun(int[] a) {
  
 for (int i = a.length-1; i>=0 ;i--) {
   for (int j = 0; j < i; j++) {
    if(a[j] > a[j+1]){
     int temp = a[j];
     a[j] = a[j+1];
     a[j+1] = temp;
    }
   }
  }
  
 }

性能分析:

本代码,不论数据的初始状态是什么,它的时间复杂度都是 O(n*n)

优化:冒泡算法的结束时机除了执行完所有的循环,还有当执行一次排序过程没有发生元素交换

private static void fun(int[] a) {
  
 for (int i = a.length-1; i>=0 ;i--) {
  
   boolean flag = false;//设置一个标识符,来表示当前的依次排序过程有没有发生元素交换
    for (int j = 0; j < i; j++) {
    if(a[j] > a[j+1]){
     int temp = a[j];
     a[j] = a[j+1];
     a[j+1] = temp;
     flag = true;//发生元素交换,将表是否置为true
    }
   }
   
   if(!flag){//如果没有发生元素交换则结束
    return ;
   }
  }
  
 }

优化后性能:

最坏情况还是O(n*n)

最好情况 O(n)

posted @ 2017-04-18 21:42  Aaronn  阅读(145)  评论(0编辑  收藏  举报