#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define ARR_LEN(num) (sizeof(num) / sizeof(int))
void print_number(int *num, int len);
void merge_sort(int *num, int len);
int main(void) {
// int number[10] = {4,5,6,1,3,4,9,6,8,9};
int number[10] = {9,8,7,6,5,4,3,2,1,0};
merge_sort(number, ARR_LEN(number));
print_number(number, ARR_LEN(number));
return 0;
}
int comp_cnt = 0;
int ass_cnt = 0;
void merge_sort(int *num, int len)
{
int left = 0, right = len / 2, cur = 0;
printf("len: %d, left: %d, right: %d\n", len, left, right);
if(1 == len)
{
return;
}
int *result = (int*)malloc(len * sizeof(int));
memset(result, 0, len * sizeof(int));
if (len > 2)
{
merge_sort(num + right, len / 2 + (len % 2));
merge_sort(num, len / 2);
}
while((right != len) || (left != (len / 2)))
{
if (num[left] > num[right])
{
printf("num[right]: %d, right: %d, len: %d\n", num[right], right, len);
result[cur++] = num[right++];
if(right == len)
{
while(left < (len / 2))
{
result[cur++] = num[left++];
}
break;
}
}
else
{
printf("num[left]: %d, left: %d, len: %d\n", num[left], left, len);
result[cur++] = num[left++];
if (left == (len / 2))
{
while(right != len)
{
result[cur++] = num[right++];
}
break;
}
}
}
memcpy(num, result, len * sizeof(int));
free(result);
}
void print_number(int *num, int len)
{
for(int cnt = 0; cnt < len; cnt++)
{
printf("%d,", num[cnt]);
}
printf("ass_cnt: %d, comp_cnt: %d\n", ass_cnt, comp_cnt);
}
归并排序
最新推荐文章于 2024-08-06 17:42:20 发布