冒泡排序

Posted Aaronn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。

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

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

代码:

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)

以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

nodejs实现冒泡排序和快速排序

java编程的冒泡等排序示例

深度解析(十五)冒泡排序

冒泡排序

拓扑排序(图)、冒泡排序、插入排序

冒泡排序