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)); } }

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

无忧云:洛阳BGP云服务器低至38.4元/月起;雅安高防云服务器/高防物理机优惠

无忧云怎么样?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。一、无忧云官网点击此处进入无忧云官方网站二...

ParkinHost:俄罗斯离岸主机,抗投诉VPS,200Mbps带宽/莫斯科CN2线路/不限流量/无视DMCA/55折促销26.4欧元 /年起

外贸主机哪家好?抗投诉VPS哪家好?无视DMCA。ParkinHost今年还没有搞过促销,这次parkinhost俄罗斯机房上新服务器,母机采用2个E5-2680v3处理器、128G内存、RAID10硬盘、2Gbps上行线路。具体到VPS全部200Mbps带宽,除了最便宜的套餐限制流量之外,其他的全部是无限流量VPS。ParkinHost,成立于 2013 年,印度主机商,隶属于 DiggDigi...

mergesort为你推荐
excel大写金额怎么在excel中设置大写金额java程序员招聘java工程师待遇如何ocr软件下载如何安装汉王ocr文字识别软件在线沟通什么是在线状态?aviconverter跪求AVIConverter V1.0下载地址pass是什么在英语里pass是什么意思distinct是什么意思SQL数据库DISTINCT是什么意思flushesno-show rate是什么driversbackup我的电脑d盘里有个Backup文件夹 怎么能让他显示出来data什么意思data是什么文件夹可以删除吗
com域名空间 广东vps 花生壳域名贝锐 国外idc 香港新世界电讯 cpanel空间 40g硬盘 空间出租 789电视 qq云端 hdd 如何注册阿里云邮箱 海外空间 路由跟踪 lamp怎么读 美国迈阿密 攻击服务器 带宽测试 mteam 新网dns 更多