【算法】冒泡排序

原创 2017年08月26日 16:17:53

           冒泡排序是一个常见的排序算法,它的思想就是重复交换相邻的两个元素,如果这两个元素反序就交换他们。每次从第一个元素到最后一个待排序的元素,每趟冒泡我们都会把最大(或者最小)的元素找到。

      

public class BubbleSort {
    public static void bubble(int a[],int n) {
        //冒泡排序,每次将最大的冒到后面
        for (int i = 0; i < n - 1; ++i) {
            //这个循环就是从第一个开始,往后冒
            for (int j = 0; j < n - i - 1; ++j) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
    }
    //改进后的冒泡排序----加入判断如果初始
    static void Bubble_1 ( int r[], int n) {
        //对冒泡排序常见的改进方法是加入一标志性变量exchange,
        // 用于标志某一趟排序过程中是否有数据交换,
        // 如果进行某一趟排序时并没有进行数据交换,
        // 则说明数据已经按要求排列好,
        // 可立即结束排序,避免不必要的比较过程
        int i= n -1;
        while ( i> 0) {
            int pos= 0; //每趟开始时,无记录交换
            for (int j= 0; j< i; j++)
                if (r[j]> r[j+1]) {
                    pos= j; //记录交换的位置
                    int tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;
                }
            i= pos; //为下一趟排序作准备
        }
    }

    //也可以在一次冒泡过程中,选出最大的值和最小的值。
    // 这样可以将排序趟数减少一半
    public static void  Bubble_2 ( int r[], int n){
        int low = 0;
        int high= n -1; //设置变量的初始值
        int tmp,j;
        while (low < high) {
            for (j= low; j< high; ++j) //正向冒泡,找到最大者
                if (r[j]> r[j+1]) {
                    tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;
                }
            --high;                 //修改high值, 前移一位
            for ( j=high; j>low; --j) //反向冒泡,找到最小者
                if (r[j]<r[j-1]) {
                    tmp = r[j]; r[j]=r[j-1];r[j-1]=tmp;
                }
            ++low;                  //修改low值,后移一位
        }
    }

    public static void main(String[] args) {
        int a[]={3,12,44,5,53,61,67,84,7,88,90};
        bubble(a,a.length);
        for(int i=0;i<a.length;i++)
        {
            System.out.println(a[i]);
        }
    }
}


             以上就是对冒泡算法的代码总结。和直接插入排序对比,可以发现直接插入排序,是从待排序中拿出最大(或者最小的数)然后插入到已经排序好的序列中,这个的插入跳跃性比较大,它的交换则是从待排序中插入到已经排序好的序列中,而冒泡排序就是相邻两个元素的交换,如果反序则交换,否则就不交换。

 

版权声明:那些你不愿意做的事情才能让你真正成长

相关文章推荐

Dubbo相关知识

摘要: (1)系统角色 Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。1 Monitor: 统计服务的调用次...

年总

站位

冒泡排序算法

  • 2013年08月06日 21:35
  • 2KB
  • 下载

java算法 冒泡排序

  • 2013年11月21日 22:53
  • 1KB
  • 下载

Java中的冒泡排序算法实现

巴黎的告白气球 2017-01-12 11:49 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走...

冒泡排序算法

  • 2013年03月18日 12:01
  • 403B
  • 下载

冒泡排序的算法

  • 2017年03月11日 09:47
  • 15KB
  • 下载

【每日算法】插入&选择&冒泡排序

在正式讲排序算法之前,我们先看一个概念:排序算法的稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[...

冒泡排序的基本算法

  • 2011年11月28日 22:37
  • 642KB
  • 下载

冒泡排序算法

  • 2011年12月07日 20:48
  • 690B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】冒泡排序
举报原因:
原因补充:

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