• Java-排序算法-插入排序


    一、插入排序的原理

    将一个记录插入到一个已经排好序的有序表中,从而得到一个新的,记录数增1的新的有序表。从第一个元素开始,先将第一个元素看做一个排好序的子序列,然后从第二个元素开始起,对第二个元素进行插入,之后得到一个两个元素的有序表,然后再对第三个元素进行插入,得到一个三个元素的有序表...,依次类推,直到最后一个元素插入正确,整个序列有序为止。

    二、插入排序的伪代码实现

    1 INSERTION-SORT(A)
    2   for j ← 2 to length[A]
    3        do key ← A[j]
    4           ▹ Insert A[j] into the sorted sequence A[1 .. j - 1] to generate a new sorted sequence A[1 .. j]
    5           i ← j - 1
    6           while i > 0 and A[i] > key
    7               do A[i + 1] ← A[i]
    8                  i ← i - 1
    9           A[i + 1] ← key

    三、插入排序的Java源码实现

     1 import java.util.Comparator;
     2 
     3 
     4 public class InsertSort {
     5 
     6     /**
     7      * 泛型方法实现插入排序算法,
     8      * 泛型的类型不能是基础类型的,必须得是引用类型的
     9      */
    10     public static <T> void insertSort(T[] t, Comparator<? super T> comparator){
    11         T key = t[0];
    12         for(int j = 1; j < t.length; j ++)
    13         {
    14             key = t[j];
    15             //Insert the t[j] into the sorted sequence t[0, j-1], to generate a new sorted sequence t[0, j]
    16             int i = j-1;
    17             while(i > -1 && comparator.compare(t[i], key) > 0)
    18             {
    19                 t[i+1] = t[i];
    20                 i--;
    21             }
    22             t[i+1] = key;
    23         }
    24     }
    25     
    26     /**
    27      * @param args
    28      */
    29     public static void main(String[] args) {
    30         // TODO Auto-generated method stub
    31         Integer[] ints =  {2, 0, 5, 23, 1, 4, 8, 56, 19};
    32         insertSort(ints, new Comparator<Integer>(){
    33             public int compare(Integer o1, Integer o2){
    34                 return o1.intValue() - o2.intValue();
    35             }
    36         });
    37         
    38         for (int i = 0; i < ints.length; i++)
    39         {
    40             System.out.print(ints[i] + " ");
    41         }
    42         System.out.println();
    43     }
    44 
    45 }

    运行结果:

    0 1 2 4 5 8 19 23 56 

    四、复杂度分析

    O(N^2)

  • 相关阅读:
    vue3.0+vite+ts项目搭建axios封装(六)
    vue3.0+vite+ts项目搭建分环境打包(四)
    vue3.0+vite+ts项目搭建初始化项目(一)
    MFC数值型关联变量和控件型关联变量
    SVN服务端、客服端安装与配置
    (转)ev4加密视频破解 ev4破解工具 ev4转mp4转换器 【无视授权密码即可转换】
    C#中的记录(record)
    C#自定义转换(implicit 或 explicit)
    C#中的隐式转换
    C#中的显式转换
  • 原文地址:https://www.cnblogs.com/keke-xiaoxiami/p/4308019.html
Copyright © 2020-2023  润新知