歸併排序算法(遞歸樹)

歸併排序算法——C語言實現

下面給出完整代碼:

#include <stdio.h>
#define MAXSIZE 32

void MERGE(int A[],int p,int q,int r)
{
	int n1 = q - p + 1;
	int n2 = r - q;
	int L[MAXSIZE];
	int R[MAXSIZE];
	int i;
	int j;
	for(i = 0;i < n1;i++)
		L[i] = A[p + i];
	for(j = 0;j < n2;j++)
		R[j] = A[q + 1 + j];
	i = 0;
	j = 0;
	int k = p;
	while (i < n1 && j < n2)
		if(L[i] < R[j])
			A[k++] = L[i++];
		else
			A[k++] = R[j++];
	while(i < n1)
		A[k++] = L[i++];
	while(j < n2)
		A[k++] = R[j++];
	for(int m = p; m <= r;m++)
		printf("%d\t",A[m]);
	printf("\n");	
 }
 
 void MERGE_SORT(int A[],int p,int r)
 {
 	int q;
 	if(p < r)
 	{
 		q = (p + r) / 2; 
 		MERGE_SORT(A,p,q);
 		MERGE_SORT(A,q + 1,r);
 		MERGE(A,p,q,r);
	 }
 }
 
 int main()
 {
 	int A[MAXSIZE];
 	int n;
 	printf("請輸入要排序的元素個數:");
 	scanf("%d",&n);
 	printf("請逐個輸入要排序的數字:");
 	for(int i = 0;i < n ;i++)
 		scanf("%d",&A[i]);
 	MERGE_SORT(A, 0, n - 1);
 	return 0;
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章