排序算法总结(3)--冒泡排序

原创 2017年05月18日 21:20:57

一、简介

冒泡排序也是一种简单直观的排序算法。从最后一个元素开始,每次比较两个相邻元素,如果他们的顺序错误就把他们交换过来。对每一对相邻元素作同样的工作,从后到前。一次循环完毕后,最前的元素是最小的数。即经过交换,最小的数“浮”到了数列的最前端。持续每次对未确定最终位置的元素重复上面的步骤,直到没有任何一对数字需要比较。 对于大小为n的数组,需要循环n-1次。为了提高效率,需要设置一个标签,如果在循环中发生了交换,标签为1,如果没有发生交换,标签为0,说明说有的元素排列完成,算法停止。

二、伪代码

冒泡排序
bubbleSort(A)
flag=true;
for i=0 to A.length-2 && flag==true
    flag=false;
    for j=A.length-1 downto i+1
        if A[j]<A[j-1]
            swap(A[j],A[j-1])
            flag=true;

三、代码实现

public class Method {
    public static void main(String[] args) {
        int[] array={41,31,59,26,41,58,1,3,78,6,15,0};
        bubbleSort(array);
        for(int x:array){
            System.out.println(x);
        }
    }

    public static void bubbleSort(int[] array){
        boolean flag=true;

        for(int i=0;i<array.length-1 && flag==true;i++){
            flag=false;
            for(int j=array.length-1;j>i;j--){
                if(array[j]<array[j-1]){
                    int temp=array[j];
                    array[j]=array[j-1];
                    array[j-1]=temp;
                    flag=true;
                }
            }
        }
    }
}

四、复杂度分析

时间复杂度:
最好情况:O(n)
最坏情况:O(n^2)
平均情况:O(n^2)
空间复杂度:O(1),原址排序

五、注意事项

1、冒泡是稳定的算法。而其时间效率是不确定的,在最好的情况下仅执行1趟冒泡做n-1次比较,无交换,而在最坏的情况下执行n-1趟冒泡,第i趟做了n-i次比较,并执行n-i次对象交换。
2、冒泡排序在每趟冒泡之后,至少有一个元素确定最终位置。
3、选择排序、插入排序和冒泡排序都是时间复杂度为O(n2)的排序算法,而且分别是堆排序、希尔排序和快速排序的基本算法,算法思想中都包含了n-1次循环和比较、交换等,下面是具体的区别。

排序算法 选择排序 插入排序 冒泡排序
每趟循环 比较多次交换一次 比较多次,移动多次 比较多次,交换多次
比较次数是否和序列有关 无关 有关 有关
每次循环后是都能确定一个元素的位置 不能
改进算法 堆排序 希尔排序 快速排序

排序算法总结之冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它的基本思想就是两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。它重复地走访过要排序的数列,一次...
  • bruce_6
  • bruce_6
  • 2014年08月21日 13:24
  • 1450

Java数据结构与算法之常见排序算法总结

目录: 1.概述 2.常用排序方法总结 3.冒泡排序 4.选择排序 5.插入排序 6.归并排序 7.快速排序 8.shell排序 1.概述 学过排序算法的朋友可能都知道排序算法...
  • qq_28057577
  • qq_28057577
  • 2016年10月08日 15:54
  • 587

排序算法之(1)——冒泡排序

**【冒泡排序的思想】** 冒泡排序总共进行n-1趟,每一趟扫描总是通过两两比较把大的往后放,所以第一趟即把最大数放在最后面,接着第二趟把第二大数放在倒数第二的位置………….到n-1完成,此时只有一...
  • adminabcd
  • adminabcd
  • 2015年06月06日 10:11
  • 863

三种简单排序方式的总结

三种简单的排序通常是指:直接插入排序、冒泡排序、简单选择排序,这三种方式排序效率都非常的低因此称他们为简单排序(思路最简单)。 直接插入排序的思路:先把待排序列分为有序序列和无序序列,初始化...
  • zhaoxiaoyao1987
  • zhaoxiaoyao1987
  • 2015年08月25日 17:46
  • 242

对冒泡排序中for循环嵌套的理解(BubbleSort)

1.冒泡排序 冒泡排序是把无序的数据按从小到大的顺序进行排列。就像它本身的命名一样,把数组中小的数据值依次往前(或向上)推进,确保数组0下标的数据值为整组中最小的数值。 2.冒泡排序代码 /...
  • Abe32
  • Abe32
  • 2017年03月11日 19:38
  • 1652

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大...
  • guoweimelon
  • guoweimelon
  • 2016年03月16日 10:52
  • 20174

编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序

代码#include using namespace std; //直接插入排序 void insert_sort(int a[],int n) { int i , j , temp; ...
  • xll1314521
  • xll1314521
  • 2017年07月24日 17:14
  • 130

最简单的排序算法之一冒泡排序----js实现

1. 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有...
  • wall1999
  • wall1999
  • 2017年02月15日 11:26
  • 5537

算法代码实现之冒泡排序,Java实现

两种类似的方式: /** * 冒泡排序 * @author roc */ public class BubbleSort { //交换数组元素 private static ...
  • QQ245671051
  • QQ245671051
  • 2016年02月27日 20:45
  • 844

【手写排序算法及优化】冒泡排序

c++代码 #include void Print(int A[],int len) { for(int i=0;i { cout } cout } void BubbleSort(int A...
  • wuqiuping695
  • wuqiuping695
  • 2015年03月28日 21:42
  • 787
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法总结(3)--冒泡排序
举报原因:
原因补充:

(最多只允许输入30个字)