我已經實現了合併排序算法明智的每一行,無法找到錯誤。 al和ar是左和右子陣列。數組與大小一起傳遞。合併排序不顯示正確的輸出
#include<stdio.h>
#include<conio.h>
void mergesort(int a[] ,int);
void merge(int al[],int,int ar[],int,int a[]);
int main()
{
int i,n;
printf("Enter the no of elements to be sorted\n");
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
mergesort(a,n);
printf("\nThe elements after sorting are:");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
getch();
return 0;
}
void mergesort(int a[],int size)
{
int i,n=size,mid;
if(n<2)
return;
mid=n/2;
int left[mid],right[n-mid];
for(i=0;i<mid;i++)
left[i]=a[i];
for(i=mid;i<n;i++)
right[i]=a[i];
mergesort(left,mid);
mergesort(right,n-mid);
merge(left,mid,right,n-mid,a);
}
void merge(int al[],int sl,int ar[],int sr,int a[])
{
int i=0,j=0,k=0;
while(i<sl && j<sr)
{
if(al[i]<=ar[j])
{
a[k]=al[i];
i++;
}
else
{
a[k]=ar[j];
j++;
}
k++;
}
while(i<sl)
{
a[k]=al[i];
i++;
k++;
}
while(j<sr)
{
a[k]=ar[j];
j++;
k++;
}
}
輸入:
no of elements:4
5 6 3 1
輸出:
5 16 16 16
什麼意思是「工作不正常」?你有一些樣本輸出? – PakkuDon 2014-10-11 05:59:20
@PakkuDon輸入:元素的數量:4,5 6 3 1輸出:5 16 16 16 – Codeluv 2014-10-11 06:06:10