美文网首页
一些常用排序算法的Java实现之冒泡排序

一些常用排序算法的Java实现之冒泡排序

作者: 一个努力生活的程序媛 | 来源:发表于2017-03-23 14:11 被阅读0次

基本思想

冒泡排序简单来说就是每一趟排序比较相邻两个元素值,大的交换到后面,那么一趟排序下来最大的元素被沉到最后。对剩下的元素重复以上操作,每一趟都将最大的元素沉到最后,直到所有元素有序。

代码实现

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

时间复杂度

  • 最好情况:O(n),若待排序序列全部有序,则只需进行一趟比较,若没有元素交换则结束排序。
  • 平均情况:O(n*n)

算法改进

  1. 前面我们说到,冒泡排序在最好的情况下时间复杂度是O(n),但事实上前面贴的代码在元素全部有序的情况下时间复杂度依然是O(n*n),因为一趟排序下来我们并不知道这趟排序元素有没有交换。因此,我们需要添加一个标记位来标记一趟排序元素是否有交换。
public void bubbleSort(int[] a){
        int temp;
        boolean flag;
        for(int i = 0; i < a.length - 1; i++){
            flag = false;
            for(int j = 0; j < a.length - 1 - i; j++){
                if(a[j] > a[j + 1]){
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = true;
                }
            }
            if(flag == false){
                break;
            }
        }
    }
  1. 再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
public void bubbleSort(int[] a){
        int temp;
        int lastSwapPos = a.length - 1;
        int lastSwapPosTemp;
        for(int i = 0; i < a.length - 1; i++){
            lastSwapPosTemp = lastSwapPos;
            for(int j = 0; j < lastSwapPosTemp; j++){
                if(a[j] > a[j + 1]){
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    lastSwapPos = j;
                }
            }
            if(lastSwapPosTemp == lastSwapPos){
                break;
            }
        }
    }

相关文章

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 排序算法的实现

    用java对常用内部排序算法的实现。 对冒泡排序,简单选择排序,直接插入排序,希尔排序,归并排序的简单实现(缺少快...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • Java实现各种常用的排序算法

    Java实现各种常用的排序算法,包括:冒泡排序、插入排序、二分排序、选择排序、希尔排序、堆排序、快速排序(两种写法...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • java 实现排序算法之「选择排序」

    java 实现排序算法系列 继冒泡排序算法之后,选择排序终于和大家见面了。为什么冒泡排序之后要说选择排序呢,是因为...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • Java语言——数组排序算法

    数组有很多常用的算法,包括冒泡排序、直接选择排序和反转排序。 一、冒泡排序 冒泡排序是最常用的数组排序算法之一,它...

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

网友评论

      本文标题:一些常用排序算法的Java实现之冒泡排序

      本文链接:https://www.haomeiwen.com/subject/qcmznttx.html