直接插入排序

来源:互联网 发布:临床医学英国留学 知乎 编辑:程序博客网 时间:2024/06/16 09:35

        上回书说道了冒泡排序以及局部冒泡排序,现在呢我们来谈一谈直接插入排序。

【基本思想】

        每一趟将一个待排序的数字,按照其关键之大小,插入到已有序序列的适当位置,直到所有数字都已经插入完毕。

        设有一个数组a[0...n-1],大致分为以下三步:

        1.初始时刻认为a[0]有序,无序区为a[1...n-1]

        2.将a[i]插入到有序区a[0...i-1],形成有序区a[0...i]

        3.i++,重复以上步骤,直到i=n-1

【基本代码】

以下是排序的代码:

public class InsertSort{         public static void main(String[] args){int array[]={9,4,5,6,8,3,2,7,10,1};for(int i=1;i<array.length;i++)//第0位独自作为有序数列,从第1位开始向后遍历        {            if(array[i]<array[i-1])//0~i-1位为有序,若第i位大于i-1位,继续寻位并插入,否则认为0~i位也是有序的,忽略此次循环,相当于continue            {                int temp=array[i];//保存第i位的值                int k = i - 1;                for(int j=k;j>=0 && temp<array[j];j--)//从第i-1位向前遍历并移位,直至找到小于第i位值停止                {                    array[j+1]=array[j];                    k--;                }                array[k+1]=temp;//插入第i位的值            }    System.out.print("第" + i + "次排序结果:");             for(int a = 0; a < array.length; a++){                 System.out.print(array[a] + "\t");             }             System.out.println("");          }System.out.print("最终排序结果是:");             for(int a = 0; a < array.length; a++){                 System.out.print(array[a] + "\t");             }     } }

排序结果如下图:


从上图可以很明白的看出,每趟排序过后,在有序区相应位置插入后一数字,同时认为第一个数是一个有序区。如果这静态的图不能让你理清思路的话可以看这里。

【总结】

直接插入排序算法简单,易于理解和实现,它的时间复杂度为O(n^2),由于时间复杂度的原因,不适合用于数目较大的排序;空间复杂度为O(1),它是一个稳定的算法。
0 0
原创粉丝点击