归并排序——分治思想 O(nlogn)
void merge_sort(vector<int>& nums, int l, int r){
if(l >= r) return;
int mid = (l + r) >> 1;
merge_sort(nums, l, mid);
merge_sort(nums, mid + 1, r);
int i = l, j = mid + 1;
vector<int> temp;
// 归并——合二为一
while(i <= mid && j <= r){
//temp.push_back(min(nums[i], nums[j]));
if(nums[i] <= nums[j]){
temp.push_back(nums[i++]);
}else{
temp.push_back(nums[j++]); // 优化j++
//j++;
}
}
while(i <= mid) temp.push_back(nums[i++]);
while(j <= r) temp.push_back(nums[j++]);
for(auto i : temp) nums[l++] = i;
}