算法基础-冒泡排序

Posted 谓戒

tags:

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

核心思想:交换排序,通过相邻数据的比较和交换来达到排序的目的;

过程:

(1)比较相邻的元素,如果第一个比第二个大,彼此交换;

(2)从开始循环1操作到结尾,那么最后元素就是max值;

(3)针对所有元素重复2过程,除了上一步得到的max值;

(4)那么每次循环都会比上一次少操作一个数,直到没有数据可操作;

优化:

(1)加入一个局部变量,当某次循环完的时候没有元素交换,则停止;

(2)从开始循环到结尾,再从末尾循环到开始;

时间复杂度计算:

(1)如果我们的元素正序,只需要循环一次即可完成排序,所需的比较次C和元素交换次数M均为最小值,Cmin=n-1,Mmin=0;此时冒泡排序是最好的时间复杂度O(n);

(2)如果不幸我们的元素刚好是反序,则需要进行n-1次排序,每次排序排序要进行n-1次元素交换,且每次都需要移动三个元素完成交换过程,此时比较和交换次数都达到最大值,Cmax=n(n-1)/2=O(n^2),Mmax=3n(n-1)/2=O(n^2);则最坏时间复杂度O(n^2);

(3)所以冒泡排序的平均时间复杂度是O(n^2);

实例:

public void bubbleSort(int[] arr){

  log.debug("冒泡开始,元素:" + Arrays.toString(arr));

  boolean good = true;

  for(int i=0;i<arr.length-1;i++){

    for(int j=0;j<arr.length-i-1;j++){

      if(arr[j] > arr[j+1]){

        int tmp = arr[j];

        arr[j] = arr[j+1];

        arr[j+1] = tmp;

        good = false;

    }

  }

  if(good){

    break;  

  }

}

log.debug("冒泡结束,元素:" + Arrays.toString(arr));

}

*更一步的优化需要考虑:20181011


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

基础排序算法之冒泡排序

基础排序算法—冒泡,插入,选择

算法基础之冒泡排序

《算法零基础100例》(第36例) 基础排序 - 冒泡排序

基础算法-冒泡排序,插入排序,选择排序

php四种基础算法:冒泡,选择,插入和快速排序法PHP基础教程