插入排序

雨燕双飞 提交于 2019-11-26 02:39:35

一、基本思想(直接插入排序)
1.把整个区间分为“有序”和“无序”。
2.每次选择无序区间内的第一个元素插入到有序区间的合适位置。

二、性能分析
选择排序是一种稳定性较好的算法。
空间复杂度为O(1)。
数据有序时,时间复杂度最好,O(N);
数据逆序时,时间复杂度最坏,O(N^2);
平均时间复杂度为O(N^2)。
插入排序的初始数据越接近有序,时间效率越高。

三、代码实现

 //插入排序,升序为例
    public static void insertSort(int[] array) {
        //bound变量来把整个数组分成两个区间
        //[0, bound) 已排序区间
        //[bound, size) 待排序区间
        for (int bound = 1; bound < array.length; bound++) {
            //bound 下标对应的元素就是待插入元素
            //把这个元素放到前面的有序顺序表中的合适位置
            int tmp = array[bound];
            int cur = bound - 1;
            for (cur = bound - 1; cur >= 0; cur--) {
                if (array[cur] > tmp) {
                    array[cur + 1] = array[cur];
                } else {
                    break;
                }
            }
            array[cur + 1] = tmp;
        }
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!