教你如何一步一步写出归并排序,算法详解(C语言)

1.首先写出算法的核心:将两个有序数组合并为一个新数组的算法

int Merge_1(int arr[], int len) {
	int* b = (int*)malloc(len * sizeof(int));//开辟辅助数组空间
	int k = 0;//给辅助数组下标一个初始值,让程序不报错
	int start1, start2, end1, end2;//暂定start为头end为尾,此时end是能取到的所以下面是小于等于,之后发现可以优化
	//算法核心:将两个数组按从小到大合并为一个新数组
	while (start1 <= end1 && start2 <= end2) {
		b[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
	}
	while (start1 <= end1) {
		b[k++] = arr[start1++];
	}
	while (start2 <= end2) {
		b[k++] = arr[start2++];
	}
}

2.设置小步长和大步长(两个for循环),小步长控制两个要合并数组的跳跃,大步长控制从一组要合并的数组跳到另一组要合并的数组,并在最后交换辅助数组,以继续进行归并排序(seg===step我后面用的seg),特别说明一下因为需要被合并的两个数组必须是有序的所以步长必须从1开始到len-1结束否则结果不是无序就是不完全有序

int Merge_2(int arr[], int len) {
	int* b = (int*)malloc(len * sizeof(int));
	int k = 0;
	int start1, start2, end1, end2;
	//seg(小步长)配合start(两个start间是大步长),seg作用是给start赋值,start起(循环次数)的决定作用
	for (in
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值