zoukankan      html  css  js  c++  java
  • 归并排序的学习与java实现

    import java.util.Arrays;
    public class Sort_Merge {
    //数组对比展示
    public static void main(String[] args) {
    int[] arr = {9,8,7,6,5,4,3,2,1,0};
    System.err.println("未排序的数组:" + Arrays.toString(arr));
    sort_merge(arr, 0, arr.length - 1);
    System.err.println("排好序的数组:" + Arrays.toString(arr));
    }
    //循环调用
    private static void sort_merge(int[] arr, int start, int end) {
    int middle = (start + end) / 2;
    if (start < end) {
    sort_merge(arr, start, middle);  //根据下标将数组逻辑拆分
    sort_merge(arr, middle + 1, end);  //根据下标将数组逻辑拆分
    merge(arr, start, middle, end);   //对某递归层数下两个数组合并
    }
    }
    private static void merge(int[] arr, int start, int middle, int end) {
    // 定义临时数组及指针
    int[] temp = new int[end - start + 1];
    int i = start; // 左
    int j = middle + 1; // 右
    int t = 0; // 临时数组指针
    // 两个子数组进行比较,将较小的元素放入临时数组中,同时对应数组指针+1;
    while (i <= middle && j <= end) {
    if (arr[i] < arr[j]) {
    temp[t++] = arr[i++];
    } else {
    temp[t++] = arr[j++];
    }
    }
    // 如果右数组先比较完成,即左数组仍有元素,将所有元素直接存入临时数组,反之亦然;
    while (i <= middle) {
    temp[t++] = arr[i++];
    }
    while (j <= end) {
    temp[t++] = arr[j++];
    }
    // 将临时数组覆盖原数组对应下标的数据
    for (int k = 0; k < temp.length; k++) {
    arr[k + start] = temp[k];
    }
    }
    }
  • 相关阅读:
    animation-fill-mode
    css3 media queries
    三列,左右两列宽度固定,中间宽度自适应
    两列布局,一列定宽,一列宽度自适应
    css3 animation
    transition和animation区别
    transform 和 transition
    弹出框样式
    python map和filter函数
    leetcode Z字形字符串
  • 原文地址:https://www.cnblogs.com/chc-blog/p/8117766.html
Copyright © 2011-2022 走看看