自从大学二年级被选进入实验室,自那以后基本就没有看过什么书,看的文档基本都是什么标准,什么手册,什么别人的案例。我好像从那以后就再没有认真的学习过。我甚至连最基本的算法都不能很好的明白。
#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;
}
真的觉得自己的算法功力实在太差了,整天也不知道自己在做什么,也感觉比较忙。