我已经很多年没有静下心来去看别人的书了

本文通过一个具体的实例详细介绍了归并排序算法的实现过程。作者分享了一段使用 C 语言编写的归并排序代码,并反思了自己在算法学习方面的不足。

自从大学二年级被选进入实验室,自那以后基本就没有看过什么书,看的文档基本都是什么标准,什么手册,什么别人的案例。我好像从那以后就再没有认真的学习过。我甚至连最基本的算法都不能很好的明白。

#include <stdio.h>

#define LEN 8

int a[LEN] = {5, 2, 4, 7, 1, 3, 2, 6};

void merge(int start, int mid, int end)
{
	int left_segment = mid - start + 1;
	int right_segment = end - mid;
	int left[left_segment], right[right_segment];
	int i, j, k;

	for (i = 0; i < left_segment; i++)
		left[i] = a[start + i];
	for (j = 0; j < right_segment; j++)
		right[j] = a[mid + 1 + 1];

	i = j = 0;
	k = start;

	while (i < left_segment && j < right_segment)
		if (left[i] < right[j])
			a[k++] = left[i++];
		else
			a[k++] = right[j++];

	while (i < left_segment)
		a[k++] = left[i++];
	while (j < right_segment)
		a[k++] = right[j++];
}

void sort(int start, int end)
{
	int mid;

	if (start < end) {
		mid = (start + end) / 2;
		printf("sort(%d-%d, %d-%d)==>%d %d %d %d %d %d %d %d\n", start, mid, mid+1, end, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
		sort(start, mid);
		sort(mid + 1, end);
		merge(start, mid, end);
		printf("sort(%d-%d, %d-%d)==>%d %d %d %d %d %d %d %d\n", start, mid, mid+1, end, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
	}
}

int main(void)
{
	sort[0, LEN - 1];

	return 0;
}

真的觉得自己的算法功力实在太差了,整天也不知道自己在做什么,也感觉比较忙。

转载于:https://my.oschina.net/SevenxAda/blog/67168

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值