• 排序算法之直接插入排序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 }
  • 相关阅读:
    实时web应用方案——SignalR(.net core) 理论篇
    Performance Improvements in .NET Core 3.0
    在Asp.NET Core中如何管理用户机密数据
    NetCore 配置文件---直接读取及选项模式读取
    NetCore WebApi 及 搭建Swagger
    奇妙的 CSS MASK
    基于Docker安装并使用Elastic APM实现指标监控
    记录HBase手动删除Hadoop备份(archive)文件后,引发Hbase写入数据出错等一系列问题处理
    arm-linux-gcc 规定 char 为 unsigned char 导致程序运行出错
    linux下生成core dump文件方法及设置
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6664315.html
Copyright © 2020-2023  润新知