#include<stdio.h>
#include<conio.h>
int arr[20];
void main()
{
int n,i;
clrscr();
printf("\n\t\t\t------Merge Sorting------\n\n");
printf("Enter the size of array\n");
scanf("%d",&n);
printf("Enter the elements:\n");
for(i=0; i < n; i++)
{
scanf("%d",&arr[i]);
}
merge_sort(arr,0,n-1);
printf("\n\n\t\t\t-----Merge Sorted Elements-----\n\n");
printf("Sorted array:\t");
for(i=0; i < n; i++)
{
printf("\t%d",arr[i]);
}
getch();
}
int merge_sort(int arr[],int low,int high)
{
int mid;
if(low < high)
{
mid=(low+high)/2;
merge_sort(arr,low,mid);
merge_sort(arr,mid+1,high);
merge(arr,low,mid,high);
}
}
int merge(int arr[],int l,int m,int h)
{
int arr1[10],arr2[10];
int n1,n2,i,j,k;
n1=m-l+1;
n2=h-m;
for(i=0; i < n1; i++)
{
arr1[i]=arr[l+i];
}
for(j=0; j < n2; j++)
{
arr2[j]=arr[m+j+1];
}
arr1[i]=9999;
arr2[j]=9999;
i=0;
j=0;
for(k=l; k <=h; k++)
{
if(arr1[i]<=arr2[j])
arr[k]=arr1[i++];
else
arr[k]=arr2[j++];
}
}
이 프로그램에서 main() merge_sort (arr, 0,6)에서 크기가 7.so 인 배열을 입력하는 경우 해당 조건 이후에 해당 함수로 전달됩니다. (0 < 6) then mid가 3이되면 low = 0 및 mid = 3 인 재귀 호출이 있고이 시간 mid는 (arr, 0,1)이있는 재귀 호출 1입니다. (0 < 0)가 참이 아니기 때문에 조건이 실패하면 낮은 값과 중간 값이 0이 될 때까지병합 정렬을 사용하여 언어를 재귀 사용
하지만 어떻게 merge_sort (arr, mid + 1, high)를 이해할 수 있습니까? ? 의견을 바탕으로 호출되는하지만이 프로그램은 컴파일러가 merge_sort를 호출하는 방법을 설명 호야 잘 실행 (편곡, 중간 + 1, 고)
이후 merge_sort (arr, low, mid); 컴파일러는 merge_sort (int arr [], int low, int high)를 다시 호출하여 merge_sort (arr, mid + 1, high)를 다시 호출합니다. 세 번째 진술로 호출됩니다? 내가 틀렸다면 올바른 날 –