美文网首页
插入排序demon

插入排序demon

作者: 良人与我 | 来源:发表于2019-01-15 12:40 被阅读8次

    插入排序demon

    public class InsertSortDemon {
        //从前往后找
        public static void sort(List<Integer> numbers){
            /**
             * 将数组看为 有序的部分和无序的区间
             * 将无序的区间插入到有序的区间
             * 起始时候 有序区间是第一个数据
             */
            for (int i = 1; i < numbers.size(); i++) {
                for (int j = 0; j < i; j++) {
                    int tmp = numbers.get(i);
                    if(tmp < numbers.get(j)){
                        numbers.remove(i);
                        numbers.add(j,tmp);
                        break;
                    }
                }
            }
        }
    
        //从后往前找
        public static void sort2(List<Integer> numbers){
            /**
             * 将数组看为 有序的部分和无序的区间
             * 将无序的区间插入到有序的区间
             * 起始时候 有序区间是第一个数据
             */
            for (int i = 1; i < numbers.size(); i++) {
                int j = i - 1;
                int tmp = numbers.get(i);
                for (; j >= 0; j--) {
                    if(tmp > numbers.get(j)){
                        break;
                    }
                }
                if(j + 1!= i){
                    Integer value = numbers.remove(i);
                    numbers.add(j+1,value);
                }
            }
        }
    
        public static void main(String[] args) {
            List<Integer> nums = Lists.newArrayList(1,2,4,6,8,3,5,9,7);
            InsertSortDemon.sort(nums);
            System.out.println(nums);
        }
    }
    

    运行结果

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    可以看出 插入排序是
    原地排序
    不需要二外的存储空间,空间复杂度是o(1)
    是稳定的排序算法
    最好时间复杂度 o(n)
    最坏时间复杂度 O(n^2)
    平均时间复杂度 O(n^2)

    相关文章

      网友评论

          本文标题:插入排序demon

          本文链接:https://www.haomeiwen.com/subject/tqzedqtx.html