归并排序

73 阅读1分钟

算法思想

归并排序的核心思想是 分治,具体流程如下。

  1. 确定分界点 mid:中间位置;
  2. 递归排序左右区间
  3. 归并两个有序数组(重点) :合二为一。

算法模板

void mergeSort(vector<int>& nums,int l, int r){ 
    if(l >= r) return ;
    
    int mid = l + (r - l) / 2; 
    mergeSort(nums,l,mid); 
    mergeSort(nums,mid + 1,r);
    
    // merge 
    int tmp[r - l + 1]; 
    int k = 0,i = l,j = mid + 1; 
    while(i <= mid and j <= r){ 
        tmp[k++] = nums[i] <= nums[j] ? nums[i++] : nums[j++]; 
    } 
    while(i <= mid) tmp[k++] = nums[i++]; 
    while(j <= r) tmp[k++] = nums[j++]; 
    for(int i = l,j = 0;i <= r;++i,++j) nums[i] = tmp[j]; 
}

算法应用