再写merge_sort

以前刚学merge sort 时候,基本就是靠抄,懵懂懂不是很理解。最近又思考了一下这个算法。其精髓所在就是 divide - merge-sort,就是先把问题分解,分解的小问题处理好后,在融合,这儿是融合排序。 现在这个程序能运行,但是用了malloc分配内存。还没相当如何释放内存。等想到了再补充修改。
// ConsoleApplication4.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdlib.h>

void show(int *src, int len) {
	int i = 0;
	for (i = 0; i< len; i++) {
		printf("%d ,", *(src + i));
	}
	printf("\n\r");
}

int* sort(int* a, int a_len, int* b, int b_len, int len) {
	printf("unsort :a\n\r ");
	show(a, a_len);
	printf("unsort :b\n\r");
	show(b, b_len);
	int* c = (int*)malloc(len * sizeof(int));
	if (c == NULL) {
		printf("malloc failed !");
		while (1);
	}
	int c_i = 0;
	int a_i = 0;
	int b_i = 0;
	while (a_i < a_len && b_i < b_len) {
		if (*(a + a_i)<*(b + b_i)) {
			*(c + c_i) = *(a + a_i);
			a_i++;
		}
		else {
			*(c + c_i) = *(b + b_i);
			b_i++;
		}
		c_i++;
	}

	while (a_i < a_len) {
		*(c + c_i) = *(a + a_i);
		a_i++;
		c_i++;
	}

	while (b_i < b_len) {
		*(c + c_i) = *(b + b_i);
		b_i++;
		c_i++;
	}

	printf("sort \n\r");
	show(c, len);
	return c;
}
int* divide_merge(int src[], int s, int e) {
	if (s >= e) {
		return src + s;
	}
	int m = (e - s) / 2 + s;
	int* a = divide_merge(src, s, m);
	int* b = divide_merge(src, m + 1, e);
	int* c = sort(a, m - s + 1, b, e - m, e - s + 1);
	return c;
}
int main()
{
	int x[] = { 5,3,8,9,0,4,7,6,2,10,23,12 };
	divide_merge(x, 0, 11);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值