排序算法之冒泡排序

舞蹈演示排序:

冒泡排序: 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. node.js 基础篇

    日志输出方式 node test.js 2>error.log 1>info.log 如果需要日志文件追加 node test.js 2>>error.log 1>> ...

  2. 多校 HDU 6397 Character Encoding (容斥)

    题意:在0~n-1个数里选m个数和为k,数字可以重复选: 如果是在m个xi>0的情况下就相当于是将k个球分割成m块,那么很明显就是隔板法插空,不能为0的条件限制下一共k-1个位置可以选择插入隔板 ...

  3. 【hdu6334】【2018Multi-University-Training Contest04】Problem C. Problems on a Tree

    维护1边的联通块和2边的联通块,合并的时候直接启发式合并. cdqz的大爷好强啊. #include<bits/stdc++.h> #define lson (o<<1) #d ...

  4. 四、springcloud之服务调用Feign(二)

    一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...

  5. VBA笔记-参考教程

    参考教程1: http://www.cnblogs.com/wuzhiblog/tag/VBA/ 1. VBA中字符换行 VBA中字符换行显示需要使用换行符来完成.下面是常用的换行符          ...

  6. CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)

    AlexNet (2012) The network had a very similar architecture as LeNet by Yann LeCun et al but was deep ...

  7. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  8. django(1)安装及配置

    1.版本选择 Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3. Django 1.6.x 支持 Python 2.6.X, 2.7. ...

  9. Springboot + Vue + shiro 实现前后端分离、权限控制

    本文总结自实习中对项目对重构.原先项目采用Springboot+freemarker模版,开发过程中觉得前端逻辑写的实在恶心,后端Controller层还必须返回Freemarker模版的ModelA ...

  10. 根据后端传的时间前端js进行倒计时

    一.故事背景: 1. 今天公司有个项目需求 2. 在前端页面实现一个倒计时功能 3. 初步设想:后端根据需求规定一个未来的时间,前端根据当前时间进行计算 4. 然后将时间格式化,时分秒的格式 5. 时 ...