데이터 구조 루틴 - 병합 정렬
#include <stdio.h>
#include <malloc.h>
#define MaxSize 20
typedef int KeyType; //
typedef char InfoType[10];
typedef struct //
{
KeyType key; //
InfoType data; // , InfoType
} RecType; //
void Merge(RecType R[],int low,int mid,int high)
{
RecType *R1;
int i=low,j=mid+1,k=0; //k R1 ,i、j 1、2
R1=(RecType *)malloc((high-low+1)*sizeof(RecType)); //
while (i<=mid && j<=high) // 1 2
if (R[i].key<=R[j].key) // 1 R1
{
R1[k]=R[i];
i++;
k++;
}
else // 2 R1
{
R1[k]=R[j];
j++;
k++;
}
while (i<=mid) // 1 R1
{
R1[k]=R[i];
i++;
k++;
}
while (j<=high) // 2 R1
{
R1[k]=R[j];
j++;
k++;
}
for (k=0,i=low; i<=high; k++,i++) // R1 R
R[i]=R1[k];
}
void MergePass(RecType R[],int length,int n) //
{
int i;
for (i=0; i+2*length-1<n; i=i+2*length) // length
Merge(R,i,i+length-1,i+2*length-1);
if (i+length-1<n) // , length
Merge(R,i,i+length-1,n-1); //
}
void MergeSort(RecType R[],int n) //
{
int length;
for (length=1; length<n; length=2*length) // log2n
MergePass(R,length,n);
}
int main()
{
int i,n=10;
RecType R[MaxSize];
KeyType a[]= {9,8,7,6,5,4,3,2,1,0};
for (i=0; i<n; i++)
R[i].key=a[i];
printf(" :");
for (i=0; i<n; i++)
printf("%d ",R[i].key);
printf("
");
MergeSort(R,n);
printf(" :");
for (i=0; i<n; i++)
printf("%d ",R[i].key);
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.