归并排序简单介绍
1、概念
归并排序(英语:Merge sort,或mergesort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
2.实现思想
归并排序的核心思想是将两个有序的数列合并成一个大的有序的序列。通过递归,层层合并,即为归并。
③动图演示:
算法实现
void merge(int data[], int lt, int mid, int rt)
{
int len = rt - lt + 1;
//开辟一个新的数组,将原数组映射进去
int *temp = new int[len];
for (int m = lt; m <= rt; m++)
{
temp[m - lt] = data[m];
}
int i = lt, j = mid + 1;//i和j分别指向两个子数组开头部分
for (int k = lt; k <= rt; k++)
{
if (i > mid)
{
data[k] = temp[j - lt];
j++;
}
else if (j > rt)
{
data[k] = temp[i - lt];
i++;
}
else if (temp[i - lt] < temp[j - lt])
{
data[k] = temp[i - lt];
i++;
}
else
{
data[k] = temp[j - lt];
j++;
}
}
delete[] temp;
}
//递归的使用归并排序,对data[l....r]排序
void merge_sort(int data[], int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
merge_sort(data, l, mid);
merge_sort(data, mid + 1, r);
merge(data, l, mid, r);
}
参考资料
https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715