插入排序(Insertion Sort)

时间:2020-07-24 21:10:15   收藏:0   阅读:56

插入排序(Insertion Sort)

原理:将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素。

核心思想:取未排序区间中的元素,在已排序区间中找到合适的位置将其插入,并保证已排序区间的数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。

算法描述:

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

动画演示:

技术图片

java代码实现:

import java.util.Arrays;
public class InsertSort {

    public void InsertSorted(int[] arr){
        int len = arr.length;
        if(len <=1) {
            return;
        }

        //第一个元素作为已排序区间的值,所以索引从1开始
        for (int i = 1; i < len ; i++) {
            //取出当前序列中未排序的元素,即当前要和已排序区间比较的元素
            int current = arr[i];
            //在有序区间要从后往前扫描[下标]
            int preIndex = i - 1;

            while(preIndex >= 0 && arr[preIndex] > current){
                arr[preIndex+1] = arr[preIndex]; // 往后移
                preIndex--;
            }
            //当前值大于preindex的值,就在preindex+1 添加值
            arr[preIndex+1] = current;
        }
    }
    
    @Test
    public  void  testInsertSorted(){
        int[] arr = {4,85,45,35,7,15,48,26,38,77};
        System.out.println(Arrays.toString(arr));
        InsertSorted(arr);
        System.out.println(Arrays.toString(arr));
    }
}

算法分析:

1:插入排序的时间复杂度是多少?

2:插入排序的空间复杂度是多少?

3:插入排序是稳定的排序算法吗?

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!