排序算法之冒泡排序

舞蹈演示排序:

冒泡排序: http://t.cn/hrf58M

希尔排序:http://t.cn/hrosvb 

选择排序:http://t.cn/hros6e 

插入排序:http://t.cn/hros0W 

快速排序:http://t.cn/ScTA1d 

归并排序:http://t.cn/Sc1cGZ

1、起泡排序是快速排序的基础,但是排序速度较慢。
2、基本思想:将序列中第 1 个元素与第 2 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
  再将第 2 个元素与第 3 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
  依此类推,直到第 n-1 个元素与第 n 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
  经过如此一趟排序,使得 n 个元素的最大值被安置在第 n 个位置上;
  此后,再对前 n-1 个元素进行同样的过程,使得该 n-1 个元素的最大值被安置在第 n-1 个位置上;
  然后再对前 n-2 个元素重复以上的过程... 直到某一趟排序过程中不出现元素交换位置的动作,排序结束。

3、过程实例

原始数组为:
--------------------------------------
[86, 2, 27, 65, 62, 71, 28, 38, 69, 56]
第 1趟
[2, 27, 65, 62, 71, 28, 38, 69, 56, 86]
第 2趟
[2, 27, 62, 65, 28, 38, 69, 56, 71, 86]
第 3趟
[2, 27, 62, 28, 38, 65, 56, 69, 71, 86]
第 4趟
[2, 27, 28, 38, 62, 56, 65, 69, 71, 86]
第 5趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 6趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 7趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 8趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 9趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 10趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
--------------------------------------
排序后的数组为:
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]

一、初级的冒泡排序

 import java.util.Arrays;

 /**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 张富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortLow {   public static void main(String[] args) {
    // 声明整型数组
    int[] array = new int[10];
    // 使用循环和随机数初始化数组
    for (int i = 0; i < array.length; i++) {
      array[i] = (int) Math.round(Math.random() * 100);
    }
    System.out.println("原始数组为:");
    System.out.println("--------------------------------------");
    System.out.println(Arrays.toString(array));
    array = bubbleSort(array);
    System.out.println("--------------------------------------");
    System.out.println("排序后的数组为:");
    System.out.println(Arrays.toString(array));
  }   /**
   *
   * 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
   * 以此类推。
   *
   *
   * 参数:int[] array
   *
   * 返回类型:int[]
   */
  private static int[] bubbleSort(int[] array) {
    // 使用临时数组,替代原始数组
    int[] arr = array;
    for (int i = 0; i < arr.length; i++) {
      System.out.println("第 " + (i + 1) + "趟");
      for (int j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] > arr[j + 1]) {
          int temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
      // 打印每一趟的数组
      System.out.println(Arrays.toString(arr));
    }
  return arr;
  } }

二、改良版的冒泡排序

 import java.util.Arrays;

 /**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 张富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortHigh {   public static void main(String[] args) {
    // 声明整型数组
    int[] array = new int[10];
    // 使用循环和随机数初始化数组
    for (int i = 0; i < array.length; i++) {
      array[i] = (int) Math.round(Math.random() * 100);
    }
    System.out.println("原始数组为:");
    System.out.println(Arrays.toString(array));
    System.out.println("--------------------------------------");     array = bubbleSort(array);
    System.out.println("--------------------------------------");
    System.out.println("排序后的数组为:");
    System.out.println(Arrays.toString(array));
  }   /**
  *
  * 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
  * 以此类推。
  *
  *
  * 参数:int[] array
  *
  * 返回类型:int[]
  */
  private static int[] bubbleSort(int[] array) {
    // 使用临时数组,替代原始数组
    int[] arr = array;
    for (int i = 0; i < arr.length; i++) {
      System.out.println("第 " + (i + 1) + "趟");
      // 交换的标志,初始值为 false
      boolean swap = false;       for (int j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] > arr[j + 1]) {
          // 如果交换了,交换标志置为 true
          swap = true;
          int temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
      System.out.println(Arrays.toString(arr));
      // 如果交换标志为 false,即没有交换,则跳出最近的循环
      if (!swap) {
        break;
      }
    }
    return arr;
  } }

排序算法之冒泡排序Java实现的更多相关文章

  1. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. 排序算法总结(基于Java实现)

    前言 下面会讲到一些简单的排序算法(均基于java实现),并给出实现和效率分析. 使用的基类如下: 注意:抽象函数应为public的,我就不改代码了 public abstract class Sor ...

  4. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  5. 八大排序算法总结与java实现(转)

    八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...

  6. 第二章:排序算法 及其他 Java代码实现

    目录 第二章:排序算法 及其他 Java代码实现 插入排序 归并排序 选择排序算法 冒泡排序 查找算法 习题 2.3.7 第二章:排序算法 及其他 Java代码实现 --算法导论(Introducti ...

  7. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  8. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  9. 排序算法之冒泡排序的思想以及Java实现

    1 基本思想 设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] > A[i]),则交换它们,其结果是将最小的元素交换到待排序序列的第一个位置,我们称 ...

随机推荐

  1. Python练习-一个简单的生成器

    今天我们学习了生成器,怎么理解生成器呢,其实就是使用函数的方式自己建立一个迭代器 # 编辑者:闫龙 #做一个简单的生成器 def EasyGene(*args): #建立一个生成器方法并传递多个参数 ...

  2. php Only variables should be passed by reference 报错问题

    这个错误是变量引用引起的非致命错误,可修改php.ini文件的error_reporting = E_ALL & E_NOTICE 使其屏蔽此错误

  3. python collection 中的队列

    认识中的队列 在以前的认知里,队列是先进先出,就是一头进,一头出,Queue.而无意间看到了deque 双向队列. 即从该队列的头或者尾部都能插入和移除元素.而起时间复杂度竟然是一样的!O(1),是不 ...

  4. 采用dlopen、dlsym、dlclose加载动态链接库【总结】【转】

    转自:https://www.cnblogs.com/Anker/p/3746802.html 1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将 ...

  5. HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]&l ...

  6. 使用MongoDB命令工具导出、导入数据

    Windows 10家庭中文版,MongoDB 3.6.3, 前言 在前面的测试中,已经往MongoDB的数据库中写入了一些数据.现在要重新测试程序,数据库中的旧数据需要被清理掉,可是,又想保存之前写 ...

  7. gbdt和xgboost api

    class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective= ...

  8. 用js面向对象思想封装插件

    js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...

  9. (转)链接服务器——获取EXCEL数据

    测试目的:验证利用链接服务器.分布式查询获取EXCEL中的数据测试环境:Microsoft SQL Server 2005 - 9.00.3080.00 (X64)  Enterprise Editi ...

  10. oralce 笔记

    查某一表的行数 select max(rownum) from tablename 插入数据之前判断是否重复 insert into tablename (coloum1,coloum2) selec ...