mergesortjava编程合并排序算法

mergesort  时间:2021-06-26  阅读:()

二路归并排序的算法及例子

#include<stdio.h> #include<stdlib.h> typedef int RecType;//要排序元素类型 void Merge(RecType *R,int low,int m,int high) {//将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的子文件R[low..high] int i=low,j=m+1,p=0; //置初始值 RecType *R1; //R1是局部向量 R1=(RecType *)malloc((high-low+1)*sizeof(RecType)); if(!R1)return; //申请空间失败 while(i<=m&&j<=high) //两子文件非空时取其小者输出到R1[p]上 R1[p++]=(R[i]<=R[j])?R[i++]:R[j++]; while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中 R1[p++]=R[i++]; while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中 R1[p++]=R[j++]; for(p=0,i=low;i<=high;p++,i++) R[i]=R1[p];//归并完成后将结果复制回R[low..high] } void MergeSort(RecType R[],int low,int high) {//用分治法对R[low..high]进行二路归并排序 int mid; if(low<high){//区间长度大于1 mid=(low+high)/2;//分解 MergeSort(R,low,mid);//递归地对R[low..mid]排序 MergeSort(R,mid+1,high); //递归地对R[mid+1..high]排序 Merge(R,low,mid,high);//组合,将两个有序区归并为一个有序区 } } void main() { int a[8]={21,34,56,43,99,37,78,10};//这里对8个元素进行排序 int low=0,high=7;//初始化low和high的值 MergeSort(a,low,high); for(int i=low;i<=high;i++)printf("%d ",a[i]);//输出测试 printf(" "); }

在快速排序、堆排序、归并排序中,什么排序是稳定的?

归并排序是稳定的 “快速排序和堆排序都不稳定 不稳定:就是大小相同的两个数,经过排序后,最终位置与初始位置交换了。

快速排序: 27 23 27 3 以第一个27作为pivot中心点,则27与后面那个3交换,形成 3 23 27 27,排序经过一次结束,但最后那个27在排序之初先于初始位置3那个27,所以不稳定。

堆排序: 比如:3 27 36 27, 如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,不稳定。

” “2 归并排序(MergeSort) 归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。

合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。

” 参考资料:

java编程合并排序算法

package?p1; import?java.util.Arrays; public?class?Guy { /** ?*?归并排序 ?*/ private?static?void?mergeSort?(?int[]?array,?int?start,?int?end,?int[]?tempArray?) { if?(end?<=?start) { return; } int?middle?=?(?start?+?end?)?/?2; mergeSort?(array,?start,?middle,?tempArray); mergeSort?(array,?middle?+?1,?end,?tempArray); int?k?=?0,?leftIndex?=?0,?rightIndex?=?end?-?start; System.arraycopy?(array,?start,?tempArray,?0,?middle?-?start?+?1); for?(?int?i?=?0;?i?<?end?-?middle;?i++?) { tempArray[end?-?start?-?i]?=?array[middle?+?i?+?1]; } while?(k?<?end?-?start?+?1) { if?(tempArray[rightIndex]?>?tempArray[leftIndex])?//?从小到大 { array[k?+?start]?=?tempArray[leftIndex++]; } else { array[k?+?start]?=?tempArray[rightIndex--]; } k++; } } public?static?void?main?(?String[]?args?) { int[]?array?=?new?int[]?{?11,?213,?134,?65,?77,?78,?23,?43?}; mergeSort?(array,?0,?array.length?-?1,?new?int[array.length]); System.out.println?(Arrays.toString?(array)); } }

Kinponet是谁?Kinponet前身公司叫金宝idc 成立于2013年 开始代理销售美国vps。

在2014年发现原来使用VPS的客户需求慢慢的在改版,VPS已经不能满足客户的需求。我们开始代理机房的独立服务器,主推和HS机房的独立服务器。经过一年多的发展,我们发现代理的服务器配置参差不齐,机房的售后服务也无法完全跟上,导致了很多问题发生,对使用体验带来了很多的不便,很多客户离开了我们。经过我们慎重的考虑和客户的建议。我们在2015开始了重大的改变, 2015年,我们开始计划托管自己...

BuyVM商家4个机房的官方测试IP地址和测速文件

BuyVM 商家算是有一些年头,从早年提供低价便宜VPS主机深受广大网友抢购且也遭到吐槽的是因为审核账户太过于严格。毕竟我们国内的个人注册账户喜欢账户资料乱写,毕竟我们看英文信息有些还是比较难以识别的,于是就注册信息的时候随便打一些字符,这些是不能通过的。前几天,我们可以看到BUYVM商家有新增加迈阿密机房,而且商家有提供大硬盘且不限制流量的VPS主机,深受有一些网友的喜欢。目前,BUYVM商家有...

RackNerd:便宜vps补货/1核/768M内存/12G SSD/2T流量/1G带宽,可选机房圣何塞/芝加哥/达拉斯/亚特拉大/荷兰/$9.49/年

RackNerd今天补货了3款便宜vps,最便宜的仅$9.49/年, 硬盘是SSD RAID-10 Storage,共享G口带宽,最低配给的流量也有2T,注意,这3款补货的便宜vps是intel平台。官方网站便宜VPS套餐机型均为KVM虚拟,SolusVM Control Panel ,硬盘是SSD RAID-10 Storage,共享G口带宽,大流量。CPU:1核心内存:768 MB硬盘:12 ...

mergesort为你推荐
win7中文语言包win7专业版怎么安装中文语言包ipv6电视什么是ipv6网络电视 有什么好处windowsmedia为什么打开所有程序都出现Windows Media Playerico监管ICO为什么被叫停avc是什么格式格式工厂转的[AS3 720 AVC]mp4是什么格式音乐代码网页中怎么写自动播放mp3音乐的代码particular教程有没有制作花瓣飘落的AE教程100days英文的一百天怎么说idataparameterweighting parameter是什么意思btest请教SpringSide到底是做什么用的
美国虚拟空间 淘宝二级域名 美国主机网 2014年感恩节 韩国电信 gateone 国内php空间 40g硬盘 qingyun 阿里校园 泉州移动 hkt 微软服务器操作系统 web服务器安全 网站在线扫描 申请免费空间和域名 万网注册 稳定空间 如何登陆阿里云邮箱 免备案jsp空间 更多