时间复杂度 nlogn
根据wiki上的代码做了些修改。
在C-free上运行通过。
/*=============================================================================
#
# FileName: MergeSort.cpp
# Desc: 归并排序
#
# Author: yulu
# Email: 187373778@qq.com
#
# Created: 2014-04-30 23:00:00
# Version: 0.0.1
# History:
# 0.0.1 | yulu | 2014-04-30 23:00:00 | initialization
#
=============================================================================*/
#include <stdio.h>
#include <stdlib.h> //rand srand
#include <time.h>
#define SORT_NUM 10;
void print_array(int *list,int len);
void merge_array(int *list1,int list1_size,int *list2,int list2_size);
void merge_sort(int *list,int list_size)
{
if(list_size>1)
{
int list1_size=list_size/2;
int list2_size=list_size-list1_size;
int *list1=list;
int *list2=list+list1_size;
merge_sort(list1,list1_size);
merge_sort(list2,list2_size);
merge_array(list1,list1_size,list2,list2_size);
}
return;
}
void merge_array(int *list1,int list1_size,int *list2,int list2_size)
{
int i,j,k;
i=j=k=0;
int list[list1_size+list2_size];
while(i<list1_size && j<list2_size)
{
list[k++]=list1[i]<list2[j]?list1[i++]:list2[j++];
}
while(i<list1_size)
{
list[k++]=list1[i++];
}
while(j<list2_size)
{
list[k++]=list2[j++];
}
for(int ii=0;ii<(list1_size+list2_size);ii++)
{
list1[ii]=list[ii];
}
return;
}
void print_array(int *list,int len)
{
for(int i=0;i<len;i++)
{
printf("%3d",list[i]);
if(i!=len-1)
printf(" ");
}
printf("\n");
return;
}
int main(void)
{
int len = SORT_NUM;
int list[len];
srand(time(0));
for (int i = 0; i < len; ++i)
{
list[i] = rand() % 100;
}
print_array(list, len);
merge_sort(list, len);
print_array(list, len);
return 0;
}