首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

归并排序 求错处。

2012-09-18 
归并排序 求差错。。。。。。C/C++ code#include stdio.h#include stdlib.hvoid merge(int *array,int *tmp,

归并排序 求差错。。。。。。

C/C++ code
#include <stdio.h>#include <stdlib.h>void merge(int *array,int *tmp,int start,int center,int end)//合并的程序。这里无错。{    int i=0;    while(start<=center-1&&center<=end)    {        if(array[start]<=array[center])           tmp[i++] = array[start++];        else if(array[start]>=array[center])           tmp[i++] = array[center++];    }    while(start<=center-1)        tmp[i++] = array[start++];    while(center<=end)        tmp[i++] = array[center++];    for(i=0;i<=end;i++)        array[i] = tmp[i];}void MergeSort(int *a,int *tmp,int start,int end){    if(start<end)    {        int center = (start+end)/2 + 1;//第二个部分的开始        MergeSort(a,tmp,start,center-1);        MergeSort(a,tmp,center,end);        merge(a,tmp,start,center,end);    }}int main (){    int a[10] = {1,3,6,7,9,0,2,4,5,8};    int tmp[10];    MergeSort(a,tmp,0,9);    for(int i=0;i<10;i++)    printf("%d ",a[i]);    return 0;}


始终不知道错误在哪个地方。。。 求助高人。。。

[解决办法]
C/C++ code
#include <stdio.h>#include <stdlib.h>void merge(int *array,int *tmp,int start,int center,int end){    int j = 0;//    int i = 0;//    int k = 0;//    int c = center;//    int s = start;//楼主的程序里start和center两个变量都会变的,而第二个while循环里程序又要用start和center的原值。        while(start<=c-1&&center<=end)//    {        if(array[start]<=array[center])           tmp[i++] = array[start++];        else if(array[start]>array[center])           tmp[i++] = array[center++];    }    while(start<=c-1)//这儿不能再用center了,因为center已经不是楼主想象中的center了。。         tmp[i++] = array[start++];    while(center<=end)        tmp[i++] = array[center++];    for(j = s;j<=end && k < i;j++, k++)//j不能从0开始,而要从start开始。        array[j] = tmp[k];}void MergeSort(int *a,int *tmp,int start,int end){    if(start<end)    {        int center = (start+end)/2 + 1;          MergeSort(a,tmp,start,center-1);        MergeSort(a,tmp,center,end);        merge(a,tmp,start,center,end);    }}int main (){    int a[10] = {1,3,6,7,9,0,2,4,5,8};    int tmp[10];    MergeSort(a,tmp,0,9);    for(int i=0;i<10;i++)    printf("%d ",a[i]);    return 0;} 

热点排行