void merge(vector<int>& nums, int left, int mid, int right) {
int i = left;
int j = mid + 1;
vector<int>ans(right - left + 1);
int index = 0;
while (i <= mid && j <= right) {
ans[index++] = nums[i] > nums[j] ? nums[j++] : nums[i++];
}
while (i <= mid) {
ans[index++] = nums[i++];
}
while (j <= right) {
ans[index++] = nums[j++];
}
for (int i = 0; i < index; i++) {
nums[left + i] = ans[i];
}
}
void merge_sort(vector<int>& nums, int left, int right) {
int mid = left + (right - left) / 2;
if (left >= right) {
return;
}
merge_sort(nums, left, mid);
merge_sort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
int main() {
vector<int> nums = { 1,3,2,5,3,7 };
merge_sort(nums, 0, nums.size() - 1);
for (auto t : nums) {
cout << t << " ";
}
return 0;
}
c++归并排序
最新推荐文章于 2024-03-03 20:21:04 发布