#include<iostream> #include<vector> #include<string> #include<sstream> #include<algorithm> #include<list> #include<stack> #include<set> #include<map> using namespace std; void merge(vector<int> & data, int start, int mid, int end) { vector<int> ret; int i = start; int j = mid + 1; while (i <= mid && j <= end) { if (data[i] < data[j]) { ret.push_back(data[i]); ++i; } else { ret.push_back(data[j]); ++j; } } while (i <= mid) { ret.push_back(data[i]); ++i; } while (j <=end) { ret.push_back(data[j]); ++j; } for (int k = 0; k < ret.size(); k++) { data[start+k] = ret[k]; } } void sort(vector<int> & data, int start, int end ) { if (start < end) { int mid = start + ((end - start) >> 1); sort(data, start, mid); sort(data, mid + 1, end); merge(data, start, mid, end); } } int main() { vector<int> data= { 8,7,6,1,5,2 ,32,122,44,22,77,66}; for (int i = 0; i < data.size(); i++) { cout << data[i]<<' '; } cout << endl; sort(data,0,data.size()-1); for (int i = 0; i < data.size(); i++) { cout << data[i] << ' '; } cout << endl; cin.get(); return 0; }
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
void core(vector<int>& arr, vector<int>& reg, int start, int end) {
if (start >= end) {
return;
}
int len = end - start;
int mid = (start + end) >> 1;
int start1 = start, end1 = mid;
int start2 = mid + 1, end2 = end;
core(arr, reg, start1, end1);
core(arr, reg, start2, end2);
int k = start;
while (start1 <= end1 && start2 <= end2) {
reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
}
while (start1 <= end1) {
reg[k++] = arr[start1++];
}
while (start2 <= end2) {
reg[k++] = arr[start2++];
}
for (k = start; k <= end; k++) {
arr[k] = reg[k];
}}
void merge_sort(vector<int>& arr) {
int size = arr.size();
vector<int> reg(size);
core(arr, reg, 0, size - 1);}
int main() {
vector<int> c = { 2,3,4,12,42,2,543,12,32,12,56,43456,34,654,54 };
merge_sort(c);
for (int i : c) {
cout << i << ' ';
}
cout << endl;
}
归并排序
最新推荐文章于 2024-03-26 17:18:09 发布