直接插入排序(插入排序)

简介:

直接插入的思想是:是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

例如,排序序列(3,2,1,5)的过程是,初始时有序序列为(3),然后从位置1开始,先访问到2,将2插入到3前面,得到有序序列(2,3),之后访问1,找到合适的插入位置后得到有序序列(1,2,3),最后访问5,得到最终有序序列(1,2,3,5).

 

 实现:

package suanfa;
/*
 * 直接插入排序
 */
public class StraightInsertionSort {
    
    public static void insertSort(int[] array) {

        int len=array.length;

        for (int i = 1; i < len; i++) {

            int temp = array[i];

            int j;
                
            for(j = i; j > 0; j--) {
                
                if(array[j-1] > temp) {
                    
                    array[j] = array[j-1];
                    
                }else
                    break;
            }
            
           array[j]=temp;        

        }

       
    }

    public static void print(int src[]) {
         for (int i = 0; i < src.length; i++) {
             
                System.out.print(src[i] + " ");
            }
         System.out.println();
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int array[]= {3,2,1,5};
        print(array);
        insertSort(array);
        print(array);
    }

}

 

分析:

最好情况下,当待排序序列中记录已经有序时,则需要n-1次比较,不需要移动,时间复杂度为 O(n) 。最差情况下,当待排序序列中所有记录正好逆序时,则比较次数和移动次数都达到最大值,时间复杂度为 O(n^2) 。平均情况下,时间复杂度为 O(n^2) 。

posted @ 2017-09-21 17:12  刘镇平Jasper  阅读(207)  评论(0编辑  收藏  举报