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、直接插入排序由 N-1 趟排序组成。
    2、基本思想:将第一个元素看成一个有序子序列,再依次从第二个记录起诸葛插入到这个有序的子序列中。
      一般地,将 elem[i] 插入到由 elem[0] ~ elem[i-1] 构成的有序子序列中
      时间复杂度:O(n) ~ O(n^2)

    原始数组为:
    [74, 27, 85, 59, 41, 66, 37, 92, 4, 93]
    --------------------------------------
    第 1趟
    [27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
    第 2趟
    [27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
    第 3趟
    [27, 59, 74, 85, 41, 66, 37, 92, 4, 93]
    第 4趟
    [27, 41, 59, 74, 85, 66, 37, 92, 4, 93]
    第 5趟
    [27, 41, 59, 66, 74, 85, 37, 92, 4, 93]
    第 6趟
    [27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
    第 7趟
    [27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
    第 8趟
    [4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
    第 9趟
    [4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
    --------------------------------------
    排序后的数组为:
    [4, 27, 37, 41, 59, 66, 74, 85, 92, 93]

    二、直接插入排序的代码实现

    1、方法一:

     1 import java.util.Arrays;
     2 
     3 /**
     4 * 
     5 * @title InsertSort
     6 * @describe 直接插入排序
     7 * @author 张富昌
     8 * @date 2016年10月1日下午5:12:41
     9 */
    10 public class InsertSort_1 {
    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     array = insertSort(array);
    23     System.out.println("--------------------------------------");
    24     System.out.println("排序后的数组为:");
    25     System.out.println(Arrays.toString(array));
    26   }
    27 
    28  
    29 
    30   /**
    31   * 
    32   * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
    33   * 
    34   * 参数:int[] array
    35   *
    36   * 返回类型:int[]
    37   */
    38   public static int[] insertSort(int[] array) {
    39     // 使用临时数组,替代原始数组
    40     int[] arr = array;
    41     // 临时变量
    42     int temp;
    43     for (int i = 1; i < arr.length; i++) {
    44 
    45       System.out.println("第 " + i + "趟");
    46       for (int j = i; j >= 1; j--) {
    47         // 较小的数排在前面
    48         if (arr[j] < arr[j - 1]) {
    49           temp = arr[j];
    50           arr[j] = arr[j - 1];
    51           arr[j - 1] = temp;
    52         } else {
    53           break;
    54         }
    55       }
    56       System.out.println(Arrays.toString(arr));
    57     }
    58     return arr;
    59   }
    60 }

    2、方法二:

     1 import java.util.Arrays;
     2 
     3 /**
     4 * 
     5 * @title InsertSort
     6 * @describe 直接插入排序
     7 * @author 张富昌
     8 * @date 2016年10月1日下午5:12:41
     9 */
    10 public class InsertSort_2 {
    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(Arrays.toString(array));
    20     System.out.println("--------------------------------------");
    21     array = insertSort(array);
    22     System.out.println("--------------------------------------");
    23     System.out.println("排序后的数组为:");
    24     System.out.println(Arrays.toString(array));
    25   }
    26 
    27   /**
    28   * 
    29   * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
    30   * 
    31   * 参数:int[] array
    32   *
    33   * 返回类型:int[]
    34   */
    35   public static int[] insertSort(int[] array) {
    36     // 使用临时数组,替代原始数组
    37     int[] arr = array;
    38     int j, temp;
    39     for (int i = 1; i < arr.length; i++) {
    40       System.out.println("第 " + (i + 1) + "趟");
    41       if (arr[i] < arr[i - 1]) {
    42         temp = arr[i];
    43         for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
    44           arr[j + 1] = arr[j];
    45         }
    46         arr[j + 1] = temp;
    47       }
    48       System.out.println(Arrays.toString(arr));
    49     }
    50     return arr;
    51   }
    52 }
  • 相关阅读:
    bash:加减乘除(bc、let)
    shell配置文件
    HDU4624 Endless Spin 【最大最小反演】【期望DP】
    SPOJ10707 COT2
    HDU5977 Garden of Eden 【FMT】【树形DP】
    Codeforces1023E Down or Right 【贪心】
    Codeforces1023F Mobile Phone Network 【并查集】【最小生成树】
    UOJ272 [清华集训2016] 石家庄的工人阶级队伍比较坚强 【分治乘法】
    LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】
    UOJ268 [清华集训2016] 数据交互 【动态DP】【堆】【树链剖分】【线段树】
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6664315.html
Copyright © 2011-2022 走看看