各种排序算法的实现-10(归并排序的实现)

24 篇文章 0 订阅
24 篇文章 0 订阅

     归并排序实际上也是一种选择排序。 思路相对简单,就不详细的说了 下面是示例代码, 

一个很好理解的例子 比如, 14,13, 11, 17,

首先准备一个 空间 s,刚好能存 这四个数。

  这四个数

 首先让14和13比较, 那么第一趟 变成了 13, 14, 和 11, 17. 这个时候 两个子序列已经有序

     那么 然后再让13, 和11 找出个大的出来, 

那就是11, 再继续 13, 再继续14, 最后就是17.

 于是就有序了 11, 13, 14, 17.  本质就是选择排序。

具体的算法实现例子如下 , 凡事我写的文章的代码 都是在VC下面编译过 可以之间运行结果的代码 ,

都是自己写过验证的。

void merge(int src[], int dst[], int low, int mid, int high)
{
	int i = low, j = mid + 1, k = low;
	while (i <= mid && j <= high)
	{
		if (src[i] <= src[j])
		{
			dst[k] = src[i];
			i++;
		}
		else
		{
			dst[k] = src[j];
			j++;
		}
		k++;
	}

	if (i <= mid)
	{
		for (int n = i; n<= mid; n++)
		{
			dst[k++] = src[n];
		}
	}
	
	if (j <= high)
	{
		for (int n = j; j<= high; j++)
		{
			dst[k++] = src[n];
		}
	}
}
void m_sort(int src[], int dst[], int low, int high)
{
	int temp[100];
	if (low == high)
	{
		dst[low] = src[low];
	}
	else
	{

		int mid = (low + high) / 2;
		m_sort(src, temp, low, mid);
		m_sort(src, temp, mid + 1, high);
		merge(temp, dst, low, mid, high);
	}
	
}
int main()
{
	int a[] = {12, 34, 9, 0, -1, 8, 45, 7, 23, 17};
	int dst[10];
	m_sort(a, dst, 0, 9);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", dst[i]);
	}
	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值