【算法】冒泡排序

原创 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]);
        }
    }
}


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

 

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

啊哈算法 之 冒泡排序

算法介绍 冒泡算法1956年开始就有人开始研究,
  • wocacaaa
  • wocacaaa
  • 2014年10月20日 00:36
  • 648

数据结构与算法-----冒泡排序

冒泡排序 1)算法 A.比较相邻的元素,如果第一个比第二个大就交换它们; B.对每一对相邻的元素都做同样的工作,从开始的第一对到结尾的最后一对。经过这一步,最后的元素是最大值; C.针对所有的...
  • u010193457
  • u010193457
  • 2015年12月02日 16:10
  • 1973

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

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

PHP实现排序算法----冒泡排序(Bubble Sort)

基本思想:冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。简单交换排序:我们先来看看在没有学习各种排序方法前经常使用的排序方法(至少我是这样。...
  • baidu_30000217
  • baidu_30000217
  • 2016年11月07日 21:01
  • 2362

8种经典算法之冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交...
  • qq_31301099
  • qq_31301099
  • 2015年12月08日 21:48
  • 418

AS3冒泡排序算法

package { public class BubbleSort { public function BubbleSort() { var arr:Array = [2,...
  • cceevv
  • cceevv
  • 2014年03月26日 23:25
  • 2603

经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

我在前面两篇博客《经典算法学习——单链表(不带头结点)实现冒泡排序》《经典算法学习——单链表实现冒泡排序(带头结点)》中详细描述了分别使用带头结点和不带头结点的单链表实现了冒泡排序,让我们对单链表和冒...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年03月03日 19:37
  • 2953

数据结构之排序算法(二)-冒泡排序及改进

冒泡排序算法需要遍历几次数组。每次遍历都要比较连续相邻的元素,如果某一对相邻元素是降序,则互换它们的值,否则,保持不变。由于较小的值像“气泡”一样逐渐浮想顶部,而较大的值沉向底部,所以叫冒泡排序。 ...
  • tuke_tuke
  • tuke_tuke
  • 2015年12月21日 15:10
  • 2125

asp 实现的冒泡排序程序

 arr = array(12,52,14,43,24,58,15,64,24,57,17,56,45)arrLen = ubound(arr)for i=0 to arrLen-1 for j = ...
  • asp89007342
  • asp89007342
  • 2009年11月06日 18:53
  • 450

算法 - 冒泡排序(C#)

// -------------------------------------------------------------------------------------------------...
  • chimomo
  • chimomo
  • 2009年10月09日 14:36
  • 34906
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】冒泡排序
举报原因:
原因补充:

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