程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-這是一個排序算法,但結果總是不爭取,求大神指出錯在哪?

c++-這是一個排序算法,但結果總是不爭取,求大神指出錯在哪?

編輯:編程綜合問答
這是一個排序算法,但結果總是不爭取,求大神指出錯在哪?
 #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define  MAX 100
int b;
    int arr[MAX],tearr[MAX];

void merge(int a[],int t[],int lhead, int rtail)
{
    int lt, k, mid, rt;
    mid = (lhead+rtail)/2;
    lt = k = lhead;
    rt = mid+1;
    if (rtail-lhead <= 0)
    {
        goto tailsort;
    }

    merge(a,t, lhead,mid);
    merge(a,t, mid+1,rtail);


        while (lt<=mid && rt<=rtail)
        {
            t[k++] = (a[lt]<=a[rt])?a[lt++]:a[rt++];
        }

        while (lt<=mid)
        {
            t[k++] = a[lt++];
        }
        while (rt<=rtail)
        {
            t[k++] = a[rt++];
        }


    for (b=0; b<MAX;b++)
    {
        a[b] = t[b];
    }



tailsort:    ;
}

void main()
{
    int head,tail,i;

    for (i=0; i<MAX;i++)
    {
        arr[i] = rand();
    }


    for(i=0; i<MAX; i++) printf("%d  ",arr[i]);
    system("pause");

    head = 0; tail = MAX;

    merge(arr,tearr, head, MAX-1);

    for (i=0; i<MAX;i++)
    {
        arr[i] = tearr[i];
    }

    for (i=0; i<MAX;i++)
    {
        printf(" %d",arr[i]);
    }
    system("pause");
}

最佳回答:


樓主我照抄了您的代碼運行後,發現好多數據都清零了,對著您的代碼我思考實驗了半天,最終終於找到問題所在,以下是代碼【在您的代碼基礎上稍有更改,經我測驗沒有問題,請驗證】

#include
#include
#include
#define MAX 100
int b;
int arr[MAX],tearr[MAX];

void merge(int a[],int t[],int lhead, int rtail)
{
int lt, k, mid, rt;
mid = (lhead+rtail)/2;
lt = k = lhead;
rt = mid+1;
if (rtail-lhead <= 0)
{
goto tailsort;
}

merge(a,t, lhead,mid);
merge(a,t, mid+1,rtail);


    while (lt<=mid && rt<=rtail)
    {
        t[k++] = (a[lt]<=a[rt])?a[lt++]:a[rt++];
    }

    while (lt<=mid)
    {
        t[k++] = a[lt++];
    }
    while (rt<=rtail)
    {
        t[k++] = a[rt++];
    }


for (b=0; b<MAX;b++)
{
    a[b] = t[b];
}

tailsort: ;
}

void main()
{
int i;

for (i=0; i<MAX;i++)
{
    arr[i] = rand();
}


for(i=0; i<MAX; i++) printf("%d  ",arr[i]);
system("pause");


/*****問題出在這裡******/
for (i=0; i<MAX;i++)
{
    tearr[i] = arr[i];
}
/*****加上這個循環即可,至於為什麼,樓主請自行考慮!******/


merge(arr,tearr, 0, MAX-1);

for (i=0; i<MAX;i++)
{
    printf(" %d",arr[i]);
}
system("pause");

}

wenpinglaoyao1
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved