• 技术文章 >java >java数组

    java数组如何插入元素并快捷排序?

    小妮浅浅小妮浅浅2021-03-23 09:36:10转载5110

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1、从数组的第二个元素进行操作,如果发现其前面的元素比他大,就将其前面的元素往后挪,直到cur指向的元素大于或者等于他前一个元素,此时cur指向的位置就是待插入元素应该插入的位置。

    static int[] insertSort2(int[] array){
     
        int len = array.length;
     
        for (int begin = 1; begin < len; begin++){
     
            int cur = begin;
     
            int tmp = array[cur];
     
            while (cur > 0 && array[cur] < array[cur-1]){
     
                array[cur] = array[cur-1];
     
                cur--;
     
            }
     
            array[cur] = tmp;
     
        }
     
        return array;
     
    }

    2、通过二分查找减少了比较次数,即cmp函数的调用,还减少了swap函数的调用。更快的找到了当前元素应该插入的位置,然后再进行挪动,提高了效率。

    static int[] insertSort3(int[] array){
     
            int len = array.length;
     
     
     
            for (int begin = 1; begin < len; begin++){
     
                int v = array[begin];
     
                int insertIndex = search(array,begin);
     
                // 将 [insertIndex, begin) 范围内的元素往右边挪动一个单位
     
                for (int i = begin; i > insertIndex; i--){
     
                    array[i] = array[i-1];
     
                }
     
                array[insertIndex] = v;
     
            }
     
            return array;
     
        }
     
        static int search(int[] array, int index){
     
            int begin = 0;
     
            int end = index;
     
            while(begin < end){
     
                int mid = (begin+end) >> 1;
     
                if (array[index] < array[mid]){
     
                    end = mid;
     
                }else{
     
                    begin = mid+1;
     
                }
     
            }
     
            return begin;
     
    }

    需要注意的是:使用了二分搜索后,只是减少了比较次数,但插入排序的平均时间复杂度依然是O(n^2)。

    以上就是java数组插入元素并快捷排序的方法,大家在对基本的数组操作有所了解后,可以就本篇的综合性使用展开练习。更多Java学习指路:java数组

    专题推荐:java数组
    品易云
    上一篇:java数组中如何查找元素的位置? 下一篇:java数组插入元素的三种方法

    相关文章推荐

    • java数组的概念理解• java数组初始化方式• java数组内存的探究• java数组进行翻转的方法有哪些• java数组中有哪些面试题• java数组中如何查找元素的位置?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网