归并排序Merge Sort
归并排序个人感觉理解起来没什么难度,主要就是一个递归地合并子序列的过程,直接写代码,在代码特殊的地方说明一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include<bits/stdc++.h> #include<vector> using namespace std;
void merge(vector<int> &arr, int left, int mid, int right){ vector<int> tmp(right - left + 1); int pl = left, pr = mid; while(pl <= mid - 1 && pr <= right){ if(arr[pl] < arr[pr]){ tmp.push_back(arr[pl++]); } else{ tmp.push_back(arr[pr++]); } } while(pl <= mid - 1){ tmp.push_back(arr[pl++]); } while(pr <= right){ tmp.push_back(arr[pr++]); } int j = 0; for(int i = left; i <= right; i++){ arr[i] = tmp[j++]; } }
void mergeSort(vector<int> &arr, int left, int right){ if(left >= right) return; int mid = (left + right) / 2; mergeSort(arr, left, mid - 1); mergeSort(arr, mid, right); }
|