• 技术文章 >java >java数组

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

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

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

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    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函数的调用。更快的找到了当前元素应该插入的位置,然后再进行挪动,提高了效率。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    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学习网