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

    归并排序采用的是分治的思想

    将数组对半,再对半,再对半,再对半。。。直到最后的每一个数都成单独的一块(这里就是递归了,左半边递归,右半边递归)

    再将拆开后的数组合并,合并是有序的合并,升序为例,则小的在前,大的在后。

    最终得到的数组就是有序的数组

    //这是一个归并排序,拆分加合并的方法
        public static int[] mergeSort(int [] array, int start, int end){
            if(start < end){
                //向左侧拆分递归
                int mid = (start + end) / 2;
                mergeSort(array,start,mid);
                mergeSort(array,mid+1,end);
    
                //归并,调用下面写的方法
                merge(array,start,mid,end);
            }
            return array;
        }
    
        public static void merge(int [] array, int left , int mid ,int right){
            int [] temp = new int [array.length];
            int start1 = left;//这是左边的指针,就是开始的指针
            int start2 = mid + 1;
            int t = left;//
    
            //第一步:按照左右两个半边进行合并,指针遍历小的就放进辅助数组temp中,直到有一边的数据以及全部放完
            while(start1 <= mid && start2<=right){
                if(array[start1]<=array[start2])
                    temp[t++]=array[start1++];
                else
                    temp[t++]=array[start2++];
            }
    
            //第二步:将左边或者右边没有填充完的数据直接添加到temp辅助数组中
            while (start1 <= mid){
                temp[t++] = array[start1++];
            }
            while (start2 <= right){
                temp[t++] = array[start2++];
            }
    
            //第三步:将temp数组复制到array数组中
            for (int i = left; i <=right; i++) {
                array[i] = temp[i];
            }
        }
  • 相关阅读:
    asp.net 启动关闭iis
    vue 界面关闭触发事件 ---实例销毁之前调用
    ElmentUI 设置禁止点击遮罩关闭 el-dialog 弹窗
    C#反射
    SQL Server 创建游标(cursor)
    文件解压缩
    文件流操作
    Linq查询
    C#线程 多线程 进程
    匿名类型和反射
  • 原文地址:https://www.cnblogs.com/zzxisgod/p/13335970.html
Copyright © 2011-2022 走看看