class MergeSort {
public:
void merge(vector<int>& values, int left, int mid, int right) {
vector<int> res;
res.resize(right-left+1);
int i=left;
int j=mid+1;
int k=0;
while(i<=mid || j<=right) {
if (i>mid) {
res[k++] = values[j++];
} else if (j>right) {
res[k++] = values[i++];
} else if (values[i] < values[j]) {
res[k++] = values[i++];
} else {
res[k++] = values[j++];
}
}
i=0;
for (int k=left; k<=right; ++k) {
if (i < res.size()) {
values[k] = res[i++];
} else {
break;
}
}
}
void mergeSort(vector<int>& values, int left, int right) {
if(left >= right) {
return;
}
int mid = left + (right-left)/2;
mergeSort(values,left, mid);
mergeSort(values, mid + 1, right);
merge(values, left, mid, right);
}
void mergeSort(vector<int>& values) {
mergeSort(values, 0, values.size()-1);
}
};
归并排序算法
最新推荐文章于 2025-06-06 17:23:33 发布