簡體   English   中英

C中的Mergesort實現

[英]Mergesort implementation in C

有人可以檢查我的mergesort代碼。 當我嘗試對輸入值進行排序時,排序后的數組包含不是來自輸入的隨機值。 他們沒有排序。 我在while循環中聲明數組的方式正確嗎?

  #include <stdio.h>
void merge (int a[], int aux[], int lo, int mid, int hi){

    for(int y=lo; y<=hi; y++){
        aux[y]=a[y];
    }
    int i=lo; 
    int j=mid+1;
    for(int k=lo;k<=mid;k++){
        if (j>hi)           a[k]=aux[i++];
        else if (i>mid)     a[k]=aux[j++];
        else if (a[j]<a[i])
        a[k]= aux[j++];
        else
        a[k]=aux[i++];
    }
return;
}


void sort (int b[],int aux[], int lo, int hi)
{ 

if(hi<=lo)
return;
int mid= lo+(hi-lo)/2;
sort(b, aux, mid+1, hi);
sort(b, aux, lo,  mid);
merge(b,aux,lo,mid,hi);
    return;
}



int main(void) {

int t,n;

long long int sum;
scanf("%d",&t);
while(t--){
    sum=0;
    scanf("%d",&n);
    int w[n];
    int m[n];
    int g[n];
    int h[n];
    for (int i=0; i<n;i++){
        scanf("%d",&m[i]);
        }


    for (int j=0; j<n;j++){
        scanf("%d",&w[j]);
}   


    sort(w,g,0,n-1);
    sort(m,h,0,n-1);

}
    return 0;
}

您正在比較merge功能中的無意義的值,並在過程的中間停止合並。

要糾正它們,請在merge功能中

  • k<=mid更改為k<=hi
  • a[j]<a[i]更改為aux[j]<aux[i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM