算法复习:归并排序
Posted dzzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法复习:归并排序相关的知识,希望对你有一定的参考价值。
leetcode 面试题51. 数组中的逆序对
本质上就是归并排序,并在合并区间过程中统计交换的逆序对的数目
归并排序需要开o(n)的辅助空间
class Solution { public: int deal(vector<int>&nums,vector<int>&tmp,int ll,int rr) { if(ll>=rr)//返回条件 return 0; int mid=ll+(rr-ll)/2; int count=deal(nums,tmp,ll,mid)+deal(nums,tmp,mid+1,rr); if(nums[mid]<nums[mid+1])//已经有序不需要再比了 return count; int x=ll,y=mid+1,i; for(i=0;x<=mid&&y<=rr;i++)//合并两个数组到新的数组 { if(nums[x]<=nums[y]) { tmp[i]=nums[x]; x++; } else { tmp[i]=nums[y]; y++; count+=(mid-x+1); } } for(;x<=mid;x++) { tmp[i]=nums[x]; i++; } for(;y<=rr;y++) { tmp[i]=nums[y]; i++; } int yy=ll; for(int k=0;k<i;k++) { nums[yy]=tmp[k]; yy++; } return count; } int reversePairs(vector<int>& nums) { int size=nums.size(); if(size<2) return 0; vector<int>tmp(size,0); return deal(nums,tmp,0,size-1); } };
以上是关于算法复习:归并排序的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 数据结构与算法之美 - 归并排序快速排序希尔排序堆排序