• 排序算法之冒泡排序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 }
  • 相关阅读:
    UNIX Systems Programming Programs
    thrift 使用小结 日月光明的日志 网易博客
    刘汝佳_百度百科
    分享:const、static关键字
    图灵社区 : 图书 : UNIX网络编程 卷1:套接字联网API(英文版•第3版)
    【转】nDCG measure相关概念 浅色天空的日志 网易博客
    分享:ProgBuddy —— 远程编码协作环境
    string::assign MemoryGarden's Blog C++博客
    Vector quantization向量化编码
    k均值算法
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6663941.html
Copyright © 2020-2023  润新知