zoukankan      html  css  js  c++  java
  • 排序之归并排序

    归并排序算法思想: 
    分而治之(divide - conquer);每个递归过程涉及两个步骤 
    第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素. 
    第二, 合并: 合并两个排好序的子序列,生成排序结果. 

    第一步:

    public static void mergeInternal(int[] arr,int low,int high) {
            if(low>=high) return;
            int mid = (high - low)/2+low;
            //左边小数组
            mergeInternal(arr, low, mid);
            //右边小数组
            mergeInternal(arr, mid+1, high);
            //合并
            merge(arr,low,mid,high);
        }

    第二步:

    public static void merge(int[] arr,int p,int q,int r) {
            int i = p;
            int j = q+1;
            //定义新数组tmp
            int[] tmp = new int[r-p+1];
            int k = 0;
            //将数组前半部分和后半部分按大小放在tmp数组中
            while(i<=q&&j<=r) {
                if(arr[i]>arr[j]) {
                    tmp[k++] = arr[j++];
                }else {
                    tmp[k++] = arr[i++];
                }
            }
            //记录当前i和q
            int start = i;
            int end = q;
            //判断后半部分是否全部加入tmp数组中,没有赋给分别将j和r赋给start和end
            if(j<=r) {
                start = j;
                end = r;
            }
            //把剩余元素放在tmp后即可
            while(start<=end) {
                tmp[k++] = arr[start++];
            }
            //将tmp数组值赋给原数组
            /*for(i = 0;i<r-p+1;i++) {
                arr[p+i] = tmp[i];
            }*/
            System.arraycopy(tmp, 0, arr, p, tmp.length);
        }

    main函数:

    public static void main(String[] args) {
            int[] arr = {11,8,3,9,7,1,2,5};
                    System.out.println(Arrays.toString(arr));
            mergeInternal(arr, 0, arr.length-1);
            System.out.println(Arrays.toString(arr));
        }    

    运行结果:

    [11, 8, 3, 9, 7, 1, 2, 5]
    [1, 2, 3, 5, 7, 8, 9, 11]

  • 相关阅读:
    zabbix监控nginx的性能
    常用iptables命令
    shell脚本小示例
    打印菜单脚本
    ping主机脚本
    Linux网络配置脚本
    多磁盘自动分区自动挂载脚本
    深入js系列-类型(null)
    深入js系列-类型(开篇)
    first-child、last-child误解
  • 原文地址:https://www.cnblogs.com/du001011/p/10520272.html
Copyright © 2011-2022 走看看