排序添加

时间:2021-03-31 11:43:47   收藏:0   阅读:0

技术图片

    public int[] insertionSort(int[] array) {
        if (array.length == 0) {
            return array;
        }
        int current;
        for (int i = 0; i < array.length - 1; i++) {
            current = array[i + 1];//从第二个元素开始,与之前的元素进行比较;之后的每个元素都做相同的操作
            int preIndex = i;//从当前元素开始比较
            while (preIndex >= 0 && current < array[preIndex]) {//如果当前元素比下一个元素大,就将当前元素移到下一位
                array[preIndex + 1] = array[preIndex];
                preIndex--;
            }
            array[preIndex + 1] = current;//前面做了--操作,避免越界-1以及补回多减掉的1,所以preIndex+1;把当前值的下一个赋到此处;如果current比它前面的所有值都大,位置就不变
        }
        return array;
    }
    public int[] MergeSort(int[] array) {
        if (array.length < 2) return array;
        int mid = array.length / 2;//取中间索引
        int[] left = Arrays.copyOfRange(array, 0, mid);//将初始数组分为两个数组,第一次分解
        int[] right = Arrays.copyOfRange(array, mid, array.length);
        return merge(MergeSort(left), MergeSort(right));//递归分解,再合并;会一直分解到单个数为止,到那个时候,left的长度为0
    }

    public int[] merge(int[] left, int[] right) {
        int[] result = new int[left.length + right.length];
        for (int index = 0, i = 0, j = 0; index < result.length; index++) {
            if (i >= left.length) {//如果左边left数组的值已经遍历完,那么result数组剩下的位置用right数组剩下的值来填
                result[index] = right[j++];
            } else if (j >= right.length) {//同理,如果right数组已经遍历完,就直接把left数组剩下的值来填result剩下的位置
                result[index] = left[i++];
            } else if (left[i] > right[j]) {
                result[index] = right[j++];//如果前面的两个都没满足,就需要比较当前left数组和right数组的当前值,谁小就把谁填进result
            } else {
                result[index] = left[i++];
            }
        }
        return result;
    }
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!