归并排序介绍:
先让一个自己写的代码
/*
编译环境CFree 5.0
归并排序
*/
#include
#define DEBUG
using namespace std;
const int n_max = 100;
int nums[n_max] = {0};
void printarray(int *array,int low, int high,char *arrayname)
{
int i = 0;
printf("%s length = %d\n",arrayname,high - low + 1);
for(i = low;i<=high;i++)
{
printf("%3d",array[i]);
}
printf("\n");
}
/*
array 是原数据
copy 是排序后的数据
*/
void MegeSortCore(int *array, int *copy, int start, int end)
{
if(start == end)
{
copy[end] = array[end];
//printf("array[%d] = %d return\n",start,array[start]);
return;
}
int mid = (start + end)/2;
//printf("mid ----array[%d] = %d\n",mid,array[mid]);
MegeSortCore(copy,array,start,mid);//--------------------------------------这里有一个交叉一定要注意!!!!!!!!!!!!!!!!
MegeSortCore(copy,array,mid+1,end);
//对 array[start....mid],array[mid+1....end] 进行规并
// printarray(array,start,end,"*array,start...end");
// printarray(copy,start,end,"*copy start...end");
int i = start,k=start,j = mid+1;
for(;i<=mid && j<= end;)
{
if(array[i]