• 归并排序


    归并排序

    概念:先将一个序列分成很多个不能再分割的子序列,将各个子序列分别排序后再将子序列合并。其实就是重复两个步骤:【1】分【2】合并。

    TIM截图20190407143026

    49

    TIM截图20190407143512

    TIM截图20190407143725

    4628

    45026

    
    public class MergeSort {
    
        public static void merSort(int[] arr,int left,int right){
    
            if(left<right){
                int mid = (left+right)/2;
                merSort(arr,left,mid);//左边归并排序,使得左子序列有序
                merSort(arr,mid+1,right);//右边归并排序,使得右子序列有序
                merge(arr,left,mid,right);//合并两个子序列
            }
        }
        private static void merge(int[] arr, int left, int mid, int right) {
            int[] temp = new int[right - left + 1];//ps:也可以从开始就申请一个与原数组大小相同的数组,因为重复new数组会频繁申请内存
            int i = left;
            int j = mid+1;
            int k = 0;
            while(i<=mid&&j<=right){
                if (arr[i] < arr[j]) {
                    temp[k++] = arr[i++];
                } else {
                    temp[k++] = arr[j++];
                }
            }
            while(i<=mid){//将左边剩余元素填充进temp中
                temp[k++] = arr[i++];
            }
            while(j<=right){//将右序列剩余元素填充进temp中
                temp[k++] = arr[j++];
            }
            //将temp中的元素全部拷贝到原数组中
            for (int k2 = 0; k2 < temp.length; k2++) {
                arr[k2 + left] = temp[k2];
            }
        }
        public static void main(String args[]){
            int[] test = {9,2,6,3,5,7,10,11,12};
            merSort(test,0,test.length-1);
            for(int i=0; i<test.length;i++){
                System.out.print(test[i] + " ");
            }
        }
    
    }
    
    
    

    参考:

    《算法导论第三版》

    排序算法之归并排序及Java实现

  • 相关阅读:
    OA
    Asp.net 将js文件打包进dll 方法
    ASP.NET编程中的十大技巧
    jquery 1.2.6 中文注释解析
    javascript 构造函数和方法
    asp.net命名空间
    .ascx和网页.aspx之间的交互方式
    windows 2003局域网共享设置
    javascript高级编程
    程序员需要具备的基本技能
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10698544.html
Copyright © 2020-2023  润新知