zoukankan      html  css  js  c++  java
  • 自己总结的Java归并排序代码

     看了网上的许多博客,然后自己总结了下,谢谢大神们的贡献

    public class MergeSort {
    
        public void sort(int[] arr, int lo, int hi) {
            if (lo >= hi) return;
            int mid = lo + (hi - lo)/2;
            sort(arr, lo, mid);
            sort(arr, mid+1,hi);
            merge(arr,lo,mid,hi);
        }
    
        public void merge(int[] a, int lo, int mid, int hi) {
            //临时数组,用来排放合并后的数组
            int[] tmp = new int[hi-lo+1];
            //前半段的指针,前半段a[lo ... mid]
            int i = lo;
            //后半段指针,后半段a[mid+1 ... hi]
            int j = mid+1;
            //tmp 指针
            int k = 0;
    
            //前半段后半段做比较,较小的值放在临时数组,然后指针+1
            while (i<=mid && j<=hi) tmp[k++] = a[i] < a[j] ? a[i++] : a[j++];
    //因为上面是与操作,所以任意其中一个条件不满足就会跳出循环,而此时数组可能没放满,因此下面两个while用来填数组 //这两个while是互斥的,只能进其中一个 while (i<=mid) tmp[k++]=a[i++]; while (j<=hi) tmp[k++]=a[j++]; //这里的判断条件一定是小于k,因为再放完最后一个数后,由于k++,所以k又自增1,如果取t<=k,会引发索引越界 //这步的作用就是将临时数组的值放回原数组,因为是递归调用,所以要记得加上左边界lo for (int t=0;t<k;t++) a[lo+t] = tmp[t]; } public static void main(String[] args) { int[] a = {-523,645,34,2,8567,1,234,-534,12,678,-34,43,7,-5867,-56,23,0,4,-1234,6,867,56,3,0,5,-3,654,78,54,53,2}; //最终测试 new MergeSort().sort(a,0,a.length-1); System.out.println(Arrays.toString(a)); } }
  • 相关阅读:
    mysql(二)数据类型
    mysql(一)
    MySQL8 安装官方示例 employees 数据库
    Elasticsearch入门
    redis入门
    git 基本使用
    vue-cli4环境变量配置和代理跨域配置
    nginx配置
    彻底搞清浏览器和服务器跨域
    File文件过滤器
  • 原文地址:https://www.cnblogs.com/tudoo/p/14813460.html
Copyright © 2011-2022 走看看