排序算法总结(2)--插入排序

原创 2017年05月18日 20:42:57

一、简介

插入排序对于少量元素的排序以及部分有序数组的排序,是一个有效的算法。插入排序的工作原理和整理一手扑克牌的过程一样。开始时,左手为空,每次从桌子上拿一张扑克牌并插入左手正确的位置。为了找到这张牌的正确位置,我们从右到左将它与手中的扑克牌比较,直到找到一张比它小的牌,将它插入这张牌的后面。此时手中所有的牌已经有序。在计算机实现中,为了要给插入的牌腾出位置,需要将一部分元素在插入之前右移。

二、伪代码

    算法:插入排序的非递归算法
    输入:未排序的数组 A
    输出:已排序的数组 A
    InsertionSort(A)
    for j=1 to A.length-1
        key=A[j];
        // 将array[j]插入到已排序的数组[1,...,j-1]中
        i=j-1;
        while i>=0 and A[i]>key
            A[i+1]=A[i];
            i=i-1;
        A[i+1]=key;

三、代码实现

public class Method {
    public static void main(String[] args) {
        int[] array={31,41,59,26,41,58};
        insertionSort(array);
    }

    public void insertionSort(int[] array){
        for (int j=1;j<array.length;j++){
            int key=array[j];
            // 将第j个元素插入前面排序好的序列里
            int i=j-1;
            while (i>=0 && array[i]>key) {
                array[i+1]=array[i];
                i--;
            array[i+1]=key;
            }
        }
    }   
}

四、复杂度分析

时间复杂度:
最好情况:O(n)
最坏情况:O(n^2)
平均情况:O(n^2)
空间复杂度:O(1),原址排序

五、注意事项

  1. 对于随机排列的长度为n且元素不重复的数组来说,最坏情况下需要大约n(n1)/2次比较和大约n(n1)/2次移动,最好情况下需要n1次比较和0次移动。
  2. 插入排序对于部分有序的数组效果很好。以下是几种典型的部分有序数组:
    (1). 数组中每个元素距离他最终的位置不远
    (2). 一个有序的大数组接一个小数组
    (3). 数组中只有几个元素的位置不正确
  3. 插入排序在一次循环之后不能确定任何一个元素的最终位置,直到所有元素排序好之才能确定元素的最终位置。

相关文章推荐

排序算法-------2-路插入排序

#include #include #define Status int #define max 20 typedef struct { Status key; }ElemType; typ...

(2)排序算法——插入排序

插入排序算法是在已排好序的子数组中反复插入一个新元素,直到整个数组全部排好序。其时间复杂度为O(n*n).import java.util.ArrayList; import java.util.Li...

java排序算法(2)—插入排序

1、概述 排序就是将一组对象按照某种逻辑顺序重新排列的过程。插入排序基本思想: (1)每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序;(2)第一趟比较前两个数,然后把第...

简单排序算法时间空间复杂度分析及应用(2)-插入排序

简单排序算法时间空间复杂度分析及应用(2)-插入排序        上一篇文章提到了一些新的概念,不言而喻,概念的功能对人类来说是一项伟大的发现,百度对“概念”的定义是这样的:概念具有两个基...

排序算法(2)插入排序的编程语言实现

导语 伪代码1 伪代码2 C plus plus语言实现插入排序 源码实现1 运行后的结果图 源码实现2 运行图 Java实现插入排序 源码实现1 运行结果 源码实现2 运行结果 结语导语我们在上文中...

排序算法(2)_插入排序

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。      本节介绍两种插入排序方法:直...

学习排序算法2--插入排序

/*插入排序 * 思想: 就像整理扑克牌一样,一张一张的拿起来,将刚拿起来的牌插入到合适的位置。 * 具体的方法是,刚拿起来的一张牌和前一张牌比较,比它小就交换,然后往前一次比较,直到它比前一...

排序算法之三 2-路插入排序

这次要谈的插入排序算法就是2-路插入排序,2-路插入算法是在折半插入排序的基础上改进 它的目的就是想减少数据的移动次数,因此,另外开辟辅助空间。首先开辟一个长度为iLength的临时数组,将待排序数...

排序算法(五)2-路插入排序

1、 2、 3、 4、 5、 6、 7、 8、
  • wwkaven
  • wwkaven
  • 2014年11月25日 08:07
  • 532

经典排序算法(2) -插入排序 InsertSort

经典排序算法(2) -插入排序 InsertSort插入排序(InsertSort)在里的描述相当贴切:插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法总结(2)--插入排序
举报原因:
原因补充:

(最多只允许输入30个字)