归并排序
归并排序主要是二路归并排序
基本思想
- 设数组a中存放了n个数据元素
- 初始时把它们看成n个长度为1的有序子数组,然后从第一个子数组开始,把相邻子数组两两合并,得到n/2的整数上界个长度为2的新的有序子数组(当n为奇数时最后一个新的有序子数组的长度为1)
- 对这些新的有序子数组再两两合并,直到最后长度为n的有序数组位置
排序过程
以数组{50,10,90,30,70,40,80,60,20}为例
代码实现
void Merge(DataType a[], int n, DataType swap[], int k) {
/*k为有序子数组的长度,一次二路归并排序后的有序子序列放在数组swap中*/
int m = 0, u1, l2, i, j, u2;
/*第一个有序子数组下界为0*/
int l1 = 0;
while (l1 + k <= n - 1) {
l2 = l1 + k;//计算第二个有序子数组下界
u1 = l2 - 1