zoukankan      html  css  js  c++  java
  • 排序算法之冒泡排序Java实现

    排序算法之冒泡排序

    舞蹈演示排序:

    冒泡排序: 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]

     

    一、初级的冒泡排序

     1 import java.util.Arrays;
     2 
     3 /**
     4 * 
     5 * @title BubbleSort
     6 * @describe 冒泡排序
     7 * @author 张富昌
     8 * @date 2016年10月1日下午3:56:30
     9 */
    10 public class BubbleSortLow {
    11 
    12   public static void main(String[] args) {
    13     // 声明整型数组
    14     int[] array = new int[10];
    15     // 使用循环和随机数初始化数组
    16     for (int i = 0; i < array.length; i++) {
    17       array[i] = (int) Math.round(Math.random() * 100);
    18     }
    19     System.out.println("原始数组为:");
    20     System.out.println("--------------------------------------");
    21     System.out.println(Arrays.toString(array));
    22     array = bubbleSort(array);
    23     System.out.println("--------------------------------------");
    24     System.out.println("排序后的数组为:");
    25     System.out.println(Arrays.toString(array));
    26   }
    27 
    28   /**
    29    * 
    30    * 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
    31    * 以此类推。
    32    *
    33    * 
    34    * 参数:int[] array
    35    *
    36    * 返回类型:int[]
    37    */
    38   private static int[] bubbleSort(int[] array) {
    39     // 使用临时数组,替代原始数组
    40     int[] arr = array;
    41     for (int i = 0; i < arr.length; i++) {
    42       System.out.println("第 " + (i + 1) + "趟");
    43       for (int j = 0; j < arr.length - 1 - i; j++) {
    44         if (arr[j] > arr[j + 1]) {
    45           int temp = arr[j];
    46           arr[j] = arr[j + 1];
    47           arr[j + 1] = temp;
    48         }
    49       }
    50       // 打印每一趟的数组
    51       System.out.println(Arrays.toString(arr));
    52     }
    53   return arr;
    54   }
    55 
    56 }

    二、改良版的冒泡排序

     1 import java.util.Arrays;
     2 
     3 /**
     4 * 
     5 * @title BubbleSort
     6 * @describe 冒泡排序
     7 * @author 张富昌
     8 * @date 2016年10月1日下午3:56:30
     9 */
    10 public class BubbleSortHigh {
    11 
    12   public static void main(String[] args) {
    13     // 声明整型数组
    14     int[] array = new int[10];
    15     // 使用循环和随机数初始化数组
    16     for (int i = 0; i < array.length; i++) {
    17       array[i] = (int) Math.round(Math.random() * 100);
    18     }
    19     System.out.println("原始数组为:");
    20     System.out.println(Arrays.toString(array));
    21     System.out.println("--------------------------------------");
    22 
    23     array = bubbleSort(array);
    24     System.out.println("--------------------------------------");
    25     System.out.println("排序后的数组为:");
    26     System.out.println(Arrays.toString(array));
    27   }
    28 
    29  
    30 
    31   /**
    32   * 
    33   * 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
    34   * 以此类推。
    35   *
    36   * 
    37   * 参数:int[] array
    38   *
    39   * 返回类型:int[]
    40   */
    41   private static int[] bubbleSort(int[] array) {
    42     // 使用临时数组,替代原始数组
    43     int[] arr = array;
    44     for (int i = 0; i < arr.length; i++) {
    45       System.out.println("第 " + (i + 1) + "趟");
    46       // 交换的标志,初始值为 false
    47       boolean swap = false;
    48 
    49       for (int j = 0; j < arr.length - 1 - i; j++) {
    50         if (arr[j] > arr[j + 1]) {
    51           // 如果交换了,交换标志置为 true
    52           swap = true;
    53           int temp = arr[j];
    54           arr[j] = arr[j + 1];
    55           arr[j + 1] = temp;
    56         }
    57       }
    58       System.out.println(Arrays.toString(arr));
    59       // 如果交换标志为 false,即没有交换,则跳出最近的循环
    60       if (!swap) {
    61         break;
    62       }
    63     }
    64     return arr;
    65   }
    66 
    67 }
  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6663941.html
Copyright © 2011-2022 走看看