• 插入排序


     排序算法的一种,方法如其名.在一个有序的序列的基础上插入一个新元素从而生成一个新的有序数列的排序方法.时间复杂度O(n2).

     插入排序又可细分为,直接插入排序,二分插入排序,希尔排序等等.演示范例使用的方法是直接插入排序.

      例:

      数组 a = [ 9,2,4,6,11,3,55] 使用插入排序,总计7个元素

      第一次:   [2,9,4,6,11,3,55]  第一次排序完毕结果,使用的比较数字 "2"(角标1).

          过程:2和9比较2比9小,到达边界,有序序列[2,9]

          结果:排序完毕可以保证前2个元素的有序性.

      第二次:   [2,4,9,6,11,3,55]  第二次排序完毕结果,使用的比较数字 "4"(角标2).

          过程:4和9比,4小,4和2比,4大,4插入2和9中间,有序系列[2,4,9]

          结果:排序完毕可以保证前3个元素的有序性

      第三次:   [2,4,6,9,11,3,55]  第三次排序完毕结果,使用的比较数字 "6"(角标3).

          过程:6和9比,6小,6和4比,6大,6插入4和9中间,有序序列[2,4,6,9]

          结果:排序完毕可以保证前4个元素的有序性.

      第四次:   [2,4,6,9,11,3,55]  第四次排序完毕结果,使用的比较数字 "11"(角标4).

          过程:11和9比,11大,11插入9后面,有序序列[2,4,6,9,11].

          结果:排序完毕可以保证前5个元素的有序性.

      第五次:   [2,3,4,6,9,11,55]  第五次排序完毕结果,使用的比较数字 "3"(角标5).

          过程:3和11比,3小,3和9比,3小,3和6比,3小,3和4比,3小,3和2比,3大,3插入2和4之间,有序数列[2,3,4,6,9,11],.

          结果:排序完毕可以保证前6个元素的有序性.

      第六次:  [2,3,4,6,9,11,55]  第六次排序完毕结果,使用的比较数字 "55"(角标6).

          过程:55和11比,55大,55插入11后面,有序序列[2,3,4,6,9,11,55],.

          结果:排序完毕可以保证前7个元素的有序性.

      排序完毕

     结论:对于长度为n的数组,使用插入排序,可以保证在第p次(0< p <n) 排序完成以后,前p+1个元素有序.

     细节: 在第p次进行排序的过程中,比较元素为a[p],有序序列为a[0]~a[p-1],因为0 ~ p-1 个元素是有序的,所以a[p]不需要和之前的p-1个元素全部进行比较,只要找到比自己小的元素,然后插入到其后即可.

      

      

    1     public static <AnyType extends Comparable<? super AnyType>> void insertSort(AnyType[] source) {
    2         for (int startIndex = 1; startIndex < source.length; startIndex++) {
    3             AnyType compareEle = source[startIndex];
    4             int swapIndex;
    5             for (swapIndex = startIndex; swapIndex > 0 && compareEle.compareTo(source[swapIndex - 1]) < 0; swapIndex--)
    6                 source[swapIndex] = source[swapIndex - 1];
    7             source[swapIndex] = compareEle;
    8         }
    9     }
    code-java
  • 相关阅读:
    算法导论 第一章
    20155312 2016-2017-2 《Java程序设计》第七周学习总结
    Visual Studio 2005 搭建Windows CE 6.0环境之准备
    C#在winform中调用系统控制台输出
    C# 目录(文件夹)复制实现
    关于加强数据库安全的一些实践
    运维小白部署网站踩坑全过程
    jQuery学习之二 jQuery选择器
    运维系列之二 Linux文件种类和扩展名
    运维系列之一 Linux的文件与目录权限解析
  • 原文地址:https://www.cnblogs.com/coldridgeValley/p/4859940.html
Copyright © 2020-2023  润新知