归并算法的存储分析

归并算法的存储分析

函数分析:
mergesort函数需要四个参数:分别是原数组,起始位置,终止位置,存储数组。在调用时,原数组和存储数组相同,即排序后数据最后仍保留在原数组。
merge函数需要五个参数,它的作用是归并两个有序数组,初始需要五个参数,分别是起始位置,中点,终止位置。

空间存储关系分析:由于归并排序需要额外的空间来存放临时数据,所以在此分析数据在空间中的传递过程。

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void merge(int r2[],int low,int mid,int high,int r3[]) {
	int i=low;int  j= mid +1;int k=low;
	while ((i <= mid) && (j <= high)) {
		if (r2[i] <= r2[j]) {
			r3[k]=r2[i];
			++i;
		}else {
		r3[k]=r2[j];
		++j;
		}
		k++;
	}
	while (i <= mid) {
		r3[k]=r2[i];
		k++;
		i++;
	}
	while (j <= high) {
		r3[k]=r2[j];
		k++;
 		j++;
	}
}/*将本次的临时空间中的数据合并到上一级的临时空间中,在最后一次时,为A*/



void mergesort(int A[],int low,int high,int r3[]) {
	int *r2;
	r2=(int*)malloc(sizeof(int)*(high-low+1));
	if(low==high) r3[low]=A[low];/*如果数组A只有一个元素,则无需排序,此时r3为A,如果大于一个元素,则触发递归,r3在递归过程中使用的是临时存储空间r2,step 2*/
	else {
		int mid=(low+high)/2;
		mergesort(A,low,mid,r2);
		mergesort(A,mid+1,high,r2);
		merge(r2,low,mid,high,r3);/*将r2中的数据进行归并转移到r3,在递归的最后一步,r3为A,在此之前,r3为临时空间r2,setp 3*/
	}
	}


int main() {
	int length = 0;
	int A[100];
	int i=1;
	char c;
	for(;;){
		scanf("%d",&A[i]);
		length++;
		i++;
		c = getchar();
		if(c=='\n') break;
		}
	mergesort(A,1,length,A);//数据从A数组转移到A数组,step 1
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值