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

    归并排序执行流程:

    public class MergeSort {
        public static void main(String[] args) {
            int arr[]={2,3,4,0,3,5,15,23};
            mergeSort(arr,0,arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
        public static void mergeSort(int []arr,int L,int R)
        {
            if (L==R)
                return;
            int mid=(L+R)/2;
            //处理左边
            mergeSort(arr,L,mid);
            //处理右边
            mergeSort(arr,mid+1,R);
            //归并
            merge(arr,L,mid,R);
        }
    
        public static void merge(int []arr,int L,int mid,int R)
        {
            //用于存储归并后的临时数组
           int temp[]=new int[R-L+1];
           //记录第一个数组中需要遍历的下标
           int i=L;
           //记录第二个数组中需要遍历的下标
           int j=mid+1;
           //用于记录在临时数组中存放的下标
            int inedx=0;
           //遍历两个数组去除小的放入临时数组
           while (i<=mid&&j<=R)
           {
               temp[inedx++]=arr[i]<arr[j]?arr[i++]:arr[j++];
    //           if (arr[i]<=arr[j])
    //           {
    //               //将小的数放入临时数组
    //               temp[inedx]=arr[i];
    //               //下标向后移动
    //               i++;
    //           }else {
    //               //将小的数放入临时数组
    //               temp[inedx]=arr[j];
    //               //下标向后移动
    //               j++;
    //           }
    //           //移动临时数组下标;
    //           inedx++;
           }
           //处理第二个数组多余的情况
           while (j<=R)
           {
               temp[inedx++]=arr[j++];
           }
           //处理第一个数组多余的情况
           while (i<=mid)
           {
               temp[inedx++]=arr[i++];
           }
           //将临时数组中的数组重新存入原数组
           for (int k=0;k<temp.length;k++)
           {
               arr[L+k]=temp[k];
           }
        }
    
    }
  • 相关阅读:
    PHP多条件模糊查询
    纯干货!一款APP从设计稿到切图过程全方位揭秘(转)
    0532. K-diff Pairs in an Array (M)
    0933. Number of Recent Calls (E)
    0139. Word Break (M)
    0713. Subarray Product Less Than K (M)
    0399. Evaluate Division (M)
    0495. Teemo Attacking (M)
    0179. Largest Number (M)
    0389. Find the Difference (E)
  • 原文地址:https://www.cnblogs.com/dloading/p/10803856.html
Copyright © 2011-2022 走看看