归并排序C语言实现(源代码)

本文介绍了一个使用C语言实现的归并排序算法,并通过一个包含20个随机整数的数组来演示排序过程。该程序首先生成一个随机数组,然后利用归并排序将其按升序排列,并打印排序前后的数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

归并排序

对一个元素个数为20个的随机数组进行快速排序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void Display(int *arr, int n){
	for (register int i = 0; i < n; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
}

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;
	
	//将原数组左边分到一个新数组left中
	for(i = L; i < M; i++){
		left[i - L] = arr[i]; 
	} 
	//将原数组右边分到一个新数组right中
	for(i = M; i <= R; i++){
		right[i - M] = arr[i]; 
	}
	i = 0; j = 0; k = L;
	while(i < LEFT_SIZE && j < RIGHT_SIZE){
		//如果left数组的第一个数字比right数组第一个数字小就把它放到新数组里 
		if(left[i] < right[j]){
			arr[k] = left[i];
			i++;
			k++;
		}else{
			arr[k] = right[j];
			j++;
			k++;
		}
	}
	while(i < LEFT_SIZE){
		arr[k] = left[i];
		i++;
		k++;
	}
	while(j < RIGHT_SIZE){
		arr[k] = right[j];
		j++;
		k++;
	}
	 
}
 

void mergesort(int *arr, int L, int R){
	int M = (L + R)/2;
	if(L == R){
		return;
	}else{
		printf("归并排序中:");
		Display(arr, 20);
		mergesort(arr, L, M);
		mergesort(arr, M+1, R);
		merge(arr, L, M+1, R);		
	}
}


		
int main(){
	int arr[20] = {6,5,4,3,2,1,8,7,0,9,11,33,22,55,77,44,66,99,888,90};;
	//生成一个有20个元素的随机数组
	srand((unsigned int)time(0));//修改种子
	for (register int i = 0; i < 20; i++){	
		arr[i] = rand();
	}
	printf("原数组为:\n");
	Display(arr, 20);
	printf("\n");
	int L = 0;
	int R = 19;
	mergesort(arr, L, R);
	printf("\n归并排序后:\n");
	Display(arr, R+1);
	return 0;
}


如有不足,欢迎各位大佬指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值