#排序# 归并排序

最近在备考二级
复习 预习到排序这一块

前来整理一下归并排序的代码。

归并排序的具体概念:视频 | 手撕九大经典排序算法,看我就够了!
归并排序的演示:归并排序

#include<stdio.h>
void merge(int arr[],int L,int M,int R) {//合并 
	int LEFT_SIZE = M - L;
	int RIGHT_SIZE = R-M+1;
	int LEFT[LEFT_SIZE];
	int RIGHT[RIGHT_SIZE];
	int i,j,k;

	for(i=L; i<M; i++) {
		LEFT[i-L] = arr[i];
	}

	for(i=M; i<=R; i++) {
		RIGHT[i-M] = arr[i];
	}

	i = 0,j = 0 ,k = L;
	while(i < LEFT_SIZE && j < RIGHT_SIZE ) {
		if(LEFT[i] > RIGHT[j]) {
			arr[k] = RIGHT[j] ;
			k++;
			j++;
		}

		else {
			arr[k] = LEFT[i] ;
			k++;
			i++;
		}
	}
                                                                                                             
	while(i < LEFT_SIZE) {
		arr[k] = LEFT[i] ;
		k++;
		i++;
	}

	while(j < RIGHT_SIZE) {
		arr[k] = RIGHT[j];
		k++;
		j++;
	}
}

void mergeSort(int arr[],int L,int R) {//用递归 将数组不断地一分为二 直至分到左右都只剩一个元素时 重新排序合并 
	if(L == R) {
		return ;
	} else {
		int M = (L+R)/2;
		mergeSort(arr,L,M);
		mergeSort(arr,M+1,R);
		merge(arr,L,M+1,R);
	}
}

int main() {
	int arr[] = {8,9,10,11,3,4,5,6};
	int L = 0;
	int R = 7;
	//int M = 4;

	int i;
	for(i=L; i<=R; i++) {
		printf("%d ",arr[i]);
	}
	printf("\n");

	mergeSort(arr ,L ,R );

	for(i=L; i<=R; i++) {
		printf("%d ",arr[i]);
	}

	return 0;
}
发布了9 篇原创文章 · 获赞 0 · 访问量 177

猜你喜欢

转载自blog.csdn.net/kkkkkkc1/article/details/100106577