归并排序——C语言实现

归并排序是利用归并的思想实现的排序方法。它的原理是假设初始化序列中有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1。然后两两归并,得到(n/2 + n% 2)个长度为2或1的有序子序列;再两两归并,…,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。一般用的归并排序就是2路归并排序。
过程如下图所示:
在这里插入图片描述
归并排序可以由递归实现,也可以由迭代实现。

一、归并排序的递归实现
思路:
首先用递归实现将原长度的序列逐步拆分成左、右两个子序列,子序列的长度是原序列长度的一半,直到子序列的长度为1时递归停止;
在拆分结束,递归的回归过程中调用排序函数,将左、右子序列排成一个有序的新序列,用最终的新序列来替换原序列的值。

#include<iostream>
using namespace std;
#define MAXSIZE 10

void Sorting(int *list1, int list1_size, int *list2, int list2_size)//排序函数-排序过程
{
   
	int temp[MAXSIZE];//定义一个临时数组来存放排序后的新序列
	int i, j, k; // 分别为list1的下标,list2的下标和temp的下标
	i = j = k = 0;
	while (i < list1_size && j < list2_size)
	{
   
		if (list1[i] < list2[j])
		{
   
			temp[k] = list1[i];
			k++;
			i++;
		}
		else
		{
   
			temp[k] = list2[j];
			k++;
			j++;
		}
	}
	//没有比完的多余部分
	while (i < list1_size)
	
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值