leetcode sort 归并排序

O

问题

在这里插入图片描述

解决方案

代码


class Solution {
    
    
public:
   /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 将给定数组排序
    * @param arr int整型vector 待排序的数组
    * @return int整型vector
    */
   vector<int> MySort(vector<int>& arr) {
    
    
       MergeSort(arr,0,arr.size()-1);
       return arr;
       // write code here
   }
   void  MergeSort(vector<int>& arr,int left, int right){
    
    
       if(left>=right) return ;
       int mid  = (right+left)/2;
       MergeSort(arr, left, mid);
       MergeSort(arr, mid+1, right);        
       merge(arr,left,mid,right);
       

   }
       void merge(vector<int>& arr,int left,int mid,int right){
    
    
           vector<int> tmp(right-left+1);
           int i = left , j = mid+1,k=0;
           while(i <= mid&&j <= right){
    
    
               if(arr[i]>arr[j]){
    
    
                   tmp[k++] = arr[j++];
               }
               else{
    
    
                   tmp[k++]  = arr[i++];
               }
           }
           while(i <= mid) tmp[k++] = arr[i++];
           while(j <= right) tmp[k++] = arr[j++];
           for(int c = left, d = 0;c <= right;c++){
    
    
               arr[c] = tmp[d++];
           }
       }
};


总结与反思

  1. 注意递归问题。

猜你喜欢

转载自blog.csdn.net/liupeng19970119/article/details/114229262