归并排序

本文针对《大话数据结构》一书中归并排序算法存在的问题,提供了修正后的代码实现,并通过实例验证了算法的正确性。修正版算法采用C++编写,详细展示了归并排序的递归分割和合并过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《大话数据结构》里边的归并排序存在bug,这是修改之后的,已亲测

#include<bits/stdc++.h>
using namespace std;

void Print_arr(int *p,int len)
{
	for (int i = 0; i < len; i++)
		cout << p[i] << " ";
	cout << endl;
}
void Sort(int *s,int i,int m,int n)
{
	int *d = (int *)malloc((n - i + 1)*sizeof(int));
	int j, k;
	int l = 0;
	for (j = i, k = m + 1; j <= m && k <= n; l++)
	{
		if (s[j] < s[k])
			d[l] = s[j++];
		else
			d[l] = s[k++];
	}
	if (j <= m)
	{
		for (int x = 0; x <= m - j; x++)
			d[l++] = s[j + x];
	}
	if (k <= n)
	{
		for (int x = 0; x <= n - k; x++)
			d[l++] = s[k + x];
	}
	memcpy(s + i, d, (n - i + 1) * sizeof(int));
	free(d);
}
void MergeSort(int *s, int *t,const int i,const int n)
{
	if (i == n)
	{
		t[i] = s[i];
	}
	else
	{
		int middle = (i + n) / 2;
		MergeSort(s, t, i, middle);
		MergeSort(s, t, middle + 1, n);
		Sort(t,i,middle,n);
	}
}
int main()
{
	int a[] = { 50,10,90,30,70,40,80,60,20 };
	int dst[9];
	MergeSort(a, dst, 0, 8);
	cout <<"rel:" <<endl;
	Print_arr(dst,sizeof(dst)/sizeof(int));
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值