2010年(88)
分类: C/C++
2010-09-19 21:33:40
#include <stdlib.h>
//合并过程
void merge(int data[],int start,int mid,int end){

int *tmpLeft,*tmpRight;
int leftSize,rightSize;
int l,r,j;
printArray(data,8);
printf("\n");
l = 0;
r = 0;
j = 0;
leftSize = mid - start + 1;
rightSize = end - mid;
tmpLeft = (int *)malloc(leftSize * sizeof(int));
tmpRight = (int *)malloc(rightSize * sizeof(int));
while(j < leftSize){
tmpLeft[j] = data[start + j];
j++;
}
j = 0;
while(j < rightSize){
tmpRight[j] = data[mid + 1 + j];
j++;
}
j = 0;
while(l < leftSize && r < rightSize){
if(tmpLeft[l] < tmpRight[r]){
data[start + j++] = tmpLeft[l++];
}else{
data[start + j++] = tmpRight[r++];
}
}
while(l < leftSize){
data[start + j++] = tmpLeft[l++];
}
while(r < rightSize){
data[start + j++] = tmpRight[r++];
}
free(tmpLeft);
free(tmpRight);
}

void merge_sort(int data[],int start,int end){
int mid;
if(start < end){
//将数组划分
mid = (start + end) / 2;
merge_sort(data,start,mid);
merge_sort(data,mid + 1,end);
//合并划分后的两个数组
merge(data,start,mid,end);
}
}
chinaunix网友2010-09-21 10:22:03
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com