利用vector写归并排序,会一直创建和清除vector向量,会占用较大内存。
#include<iostream> #include<vector> using namespace std; void merge_sort_two_vec(vector<int> &sub_left, vector<int> &sub_right, vector<int> &sub){ int i = 0; int j = 0; while(i < sub_left.size() && j < sub_right.size()){ if(sub_left[i] > sub_right[j]){ sub.push_back(sub_right[j]); j++; } else{ sub.push_back(sub_left[i]); i++; } } for(; i < sub_left.size(); i++){ sub.push_back(sub_left[i]); } for(; j < sub_right.size(); j++){ sub.push_back(sub_right[j]); } } void merge_sort(vector<int> &vec){ int mid = vec.size() / 2; vector<int> sub_left; vector<int> sub_right; if(vec.size() == 1) return; for(int i = 0; i < mid; i++){ sub_left.push_back(vec[i]); } for(int i = mid; i < vec.size(); i++){ sub_right.push_back(vec[i]); } merge_sort(sub_left); merge_sort(sub_right); vec.clear(); merge_sort_two_vec(sub_left, sub_right, vec); } int main(){ vector<int> c; c.push_back(1); c.push_back(7); c.push_back(4); c.push_back(2); merge_sort(c); for(int i = 0; i < c.size(); i++) cout<<c[i]<<endl; return 0; }