根据归并排序算法的伪代码,实现完整的归并排序算法,并编写测试类测试其正确性。

根据归并排序算法的伪代码,实现完整的归并排序算法,并编写测试类测试其正确性。

根据归并排序算法的伪代码,实现完整的归并排序算法,并编写测试类测试其正确性。_第1张图片
根据归并排序算法的伪代码,实现完整的归并排序算法,并编写测试类测试其正确性。_第2张图片
粗略地看,伪代码中写了两个方法,其中MergeSort()方法是将数组中的n个元素分割成n个数组。Merge()方法是将分割好的数组进行比较并有序地合并。代码如下:

    public static void main(String[] args) {
        int[] A = new int[] { 9,8,7,6,5,4,3,2,1};
        int left = 0;
        int right = A.length-1;
        int[] A1 = mergeSort(A,left,right);
        for(int i=0;i<A.length;i++){
            System.out.print(A[i]+" ");
        }
    }
    public static int[] mergeSort(int[] A, int left, int right) {
        if(left >= right)
            //递归终止:仅有一个元素
            return A;

        int mid = (left + right)/2;
        //递归求解子问题
        A = mergeSort(A,left,mid);
        A = mergeSort(A,mid+1,right);
        //合并子问题
        A = merge(A,left,mid,right);
        return A;
    }
    private static int[] merge(int[] A, int left, int mid, int right) {
        int[] A1 = new int[A.length];
        if (right + 1 - left >= 0)
            System.arraycopy(A, left, A1, left, right + 1 - left);
        int i = left;
        int j = mid + 1;
        int k = 0;
        //遍历子数组,进行合并
        while (i <= mid && j <= right) {
            //从两个数组中将较小的数放入原数组
            if (A1[i] <= A1[j]) {
                A[left + k] = A1[i];
                k++;
                i++;
            } else {
                A[left + k] = A1[j];
                k++;
                j++;
            }
        }
        //添加剩余元素保证有序
        if (i <= mid) {
            int n = left + k;
            int m = i;
            for (; n <= right; n++) {
                for (; m <= mid; ) {
                    A[n] = A1[m];
                    break;
                }
                m++;
            }
        } else {
            int n = left + k;
            int m = j;
            for (; n <= right; n++) {
                for (; m <= right; ) {
                    A[n] = A1[m];
                    break;
                }
                m++;
            }
        }
        return A;
    }

你可能感兴趣的:(二分算法,算法,排序算法,java)