排序算法之冒泡排序

舞蹈演示排序:

冒泡排序: 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. 使用httpClient调用接口,参数用map封装或者使用JSON参数,并转换返回结果

    这里接口用表存起来,标记请求方式,然后接受参数,消息或者请求参数都可以, 然后先是遍历需要调用的接口,封装参数,再分别调用get与post即可,没有微服务还是得自己写 //消息转发-获取参数中对应参数 ...

  2. python的面对对象

    创建类 使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾: class ClassName: '类的帮助信息' #类文档字符串 class_suite #类体 类的帮助信息 ...

  3. 87.在ModelSim中添加Xilinx ISE仿真库

    在ModelSim中添加Xilinx ISE仿真库 说明: l ModelSim一定要安装在不带空格的目录下,即不要安装在“Program Files”目录下.如作者是安装在D:\softwares\ ...

  4. LCD时序中设计到的VSPW/VBPD/VFPD/HSPW/HBPD/HFPD总结【转】

    转自:https://blog.csdn.net/u011603302/article/details/50732406 下面是我在网上摘录的一些关于LCD信号所需时钟的一些介绍, 描述方式一: 来自 ...

  5. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  6. 十二、springboot之web开发之静态资源处理

    springboot静态资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议大家使用Spring Boot的默 ...

  7. 十一、springboot之web开发之Filter

    我们常常在项目中会使用filters用于录调用日志.排除有XSS威胁的字符.执行权限验证等等.Spring Boot自动添加了OrderedCharacterEncodingFilter和Hidden ...

  8. samba和SELINUX 冲突

    在使用Samba进行建立Window与Linux共享时,要是不能访问,出现“您可能没有权限使用网络资源”. setsebool -P samba_enable_home_dirs on setsebo ...

  9. maven scope 'provided' 和 ‘compile’的区别

    解释 其实这个问题很简单. 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact(模块)对应的jar包在classpath中. 而对 ...

  10. python图片处理(三)

    ji那天用到了python图片处理中的二值图像的骨架提取,在matlab中通过输入图像的二值,来处理得到图像的骨架, skelimage = bwmorph(im, 'skel', inf); 在ma ...