• 自己总结的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)); } }
  • 相关阅读:
    寄存器(内存访问)知识整理
    寄存器知识点
    汇编语言之实验一
    汇编语言基础知识的总结
    汇编语言之第五章至第八章知识汇总
    汇编实验之第八章数据处理的两个基本问题
    汇编语言之第七章更灵活的定位内存地址的方法
    汇编语言之实验九
    汇编语言之第六章包含多个段的程序
    汇编语言之第五章【BX】和loop指令
  • 原文地址:https://www.cnblogs.com/tudoo/p/14813460.html
Copyright © 2020-2023  润新知