对于归并排序:
- 归并排序是稳定的
- 归并排序时间复杂度为o(nlog(n))
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
/* stl */
#include<vector>
#include<algorithm>
#include<queue>
#include<deque>
#include<stack>
#include<list>
#include<map>
#include<unordered_map>
#include<unordered_set>
using namespace std;
// 归并排序
void merge(vector<int>& nums, int lo, int mid, int hi, vector<int> &assist) {
int i = lo;
int j = mid + 1;
int n = 0;
while (i <= mid || j <= hi) {
while (i > mid && j <= hi)
assist[n++] = nums[j++];
while (j > hi && i <= mid)
assist[n++] = nums[i++];
if (i > mid && j > hi)
break;
if (nums[i] <= nums[j]) {
assist[n++] = nums[i++];
continue;
}
assist[n++] = nums[j++];
}
for (int k = lo, n = 0; k <= hi; k++, n++)
nums[k] = assist[n];
}
void mergeSort(vector<int>& nums, int lo, int hi, vector<int> &assist) {
if (lo >= hi)
return;
int mid = (lo + hi) / 2;
mergeSort(nums, lo, mid, assist);
mergeSort(nums, mid + 1, hi, assist);
//merge 操作lo - mid, mid + 1 - hi两个有序数组进行合并
merge(nums, lo, mid, hi, assist);
}
int main(int argc, char* argv[])
{
vector<int> nums{ 1,4,34, 67, 9,6, 8, 9, 8, 2,1,2,3,5,7,10,13 };
vector<int> assist(nums.size(), 0);
mergeSort(nums, 0, nums.size() - 1, assist);
return 0;
}

本文深入讲解了归并排序算法的实现原理,展示了如何通过递归将数组分为更小的部分进行排序,然后合并这些部分以得到最终排序结果。文章提供了详细的C++代码实现,包括merge和mergeSort函数的定义及调用过程。
1848

被折叠的 条评论
为什么被折叠?



