排序算法总结(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. 插入排序在一次循环之后不能确定任何一个元素的最终位置,直到所有元素排序好之才能确定元素的最终位置。

从vb的角度看几种简单的排序法

老农看代码,比如老农看一亩地里的一棵苗,可以用哪一行,哪一列来形容,放在计算机里,即用i,j表示,然后老农所看到的一亩地,就可以用a(i)来表示,如果要形容这是我家的地,就需要再上升一个档次,用a(J...
  • a11112244444
  • a11112244444
  • 2016年07月29日 20:14
  • 1994

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

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

C++、C#、java算法学习日记04----二分插入排序

经过上几篇对排序算法的了解,我们发现,所谓的排序也就是确定一个数组中每个元素的位置,然后对号入座,其过程也就是找到该元素的位置。确定位置,使用二分法可以达到很高的效率,我们将他应用到插入排序中就算是对...
  • HC666
  • HC666
  • 2015年10月30日 17:22
  • 1545

几种基本的排序算法:选择排序、插入排序、冒泡排序

选择排序(Selection sort)、插入排序(Insertion sort)与冒泡排序(Bubble sort)這三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(时...
  • wuxianglong
  • wuxianglong
  • 2011年10月13日 11:59
  • 7560

排序算法系列:插入排序算法

直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。...
  • u013761665
  • u013761665
  • 2016年03月24日 08:53
  • 6778

八大排序算法总结以及python实现

一、概述         排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。    ...
  • u013719780
  • u013719780
  • 2015年10月17日 09:43
  • 5898

几种排序算法的简单总结

离职总是很麻烦,老板人不错,得好好把工作对接完咯。晚上闲一下就谢谢博客。 前言     下面会讲到一些简单的排序算法(均基于java实现),并给出实现和效率分析。     使用的基类如下: publ...
  • anxpp
  • anxpp
  • 2016年03月23日 23:16
  • 3367

舞动的排序算法

在计算机中,排序算法有很多,包括插入排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排序,堆排序,选择排序,归并排序和快速排序都是比较排序,它们通过对数组中的元素进行比较...
  • gaokao2011
  • gaokao2011
  • 2014年02月27日 09:21
  • 957

使用C#详解常用排序算法(二):插入排序(Insert Sort)

结合代码和运行输出详细讲解插入排序的排序过程
  • qqiang00
  • qqiang00
  • 2015年08月09日 09:48
  • 699

经典排序算法----直接插入排序算法及其改进(稳定)

直接插入,平均情况O(n2),最好情况O(n),最坏情况O(n2),辅助空间O(1),稳定。...
  • qianqin_2014
  • qianqin_2014
  • 2016年04月21日 21:17
  • 680
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法总结(2)--插入排序
举报原因:
原因补充:

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