排序算法(C实现)-------- 归并排序

       “归并”的含义是将两个或两个以上的的有序表组合成一个新的有序表,这也是归并排序的核心,归并排序也属于递归排序算法类

          算法的主要步骤:

          ( 1 )  将待排序序列分成左右两部分。

          ( 2 )  分别对左右两部分进行迭代排序。

          ( 3 )  对左右两部分进行归并,归并后的结果就已排好序。

           

           首先是归并,即将两个已经有序的序列合并为一个有序的序列

      

void Merge(ElemType array[],int start,int median,int end){
	int low = start;
	int high = median+1;
	int index = 0;
	int length = end - start + 1;
	ElemType *temp_arr = NULL;
	//动态分配空间
	temp_arr = (ElemType*)malloc(length * sizeof(ElemType));
	//比较两部分,将较小的元素存入新数组中
	while(low <= median && high <= end){
		if(array[low] <= array[high])
			temp_arr[index++] = array[low++];
	
		else
			temp_arr[index++] = array[high++];
	
	}
	//将剩下的元素移动到新数组中
	while(low <= median)
		temp_arr[index++] = array[low++];
	while(high <= end)
		temp_arr[index++] = array[high++];
	//将temp_arr中元素移动到原array中,并释放空间
	memmove(&array[start],temp_arr,sizeof(ElemType)* length);
	free(temp_arr);	

}


        接下来对待排序序列进行划分,并迭代左右两部分

 

void Msort(ElemType array[],int start,int end){
	int median;
	if(start < end){
		//计算中间元素下标 
		median = start + ((end - start) >> 1);
		//分别对左右两部分进行排序
		Msort(array,start,median);
		Msort(array,median + 1,end);
		//对有序的两部分进行合并 
		Merge(array,start,median,end);
	}

}


       最后就是调用函数,对一个初始的序列进行排序

void merge_sort(ElemType array[],int length){
	if(array == NULL || length == 0)
		exit(-1);
	Msort(array,0,length - 1);
}

 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值