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));
}
}
virmach怎么样?virmach家这几年非常火,从商家的黑五闪购开始,以超低的价格吸引了大批的国人客户,而且商家的机器还是非常稳定的,站长手里的4.75刀年付已经用了两年了,非常稳定,不过商家到国内的线路一般,目前商家新上了夏季优惠促销,价格低到发指,年付7.2美元起,商家反馈将在9月开始更换AMD+NVMe平台,这个消息从年初就有了,不过一直没有更换,目前这个时间也不确定是否准确。点击进入:...
博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...
10GBIZ服务商经常有看到隔壁的一些博客分享内容,我翻看网站看之前有记录过一篇,只不过由于服务商是2020年新成立的所以分享内容比较谨慎。这不至今已经有将近两年的服务商而且云服务产品也比较丰富,目前有看到10GBIZ服务商有提供香港、美国洛杉矶等多机房的云服务器、独立服务器和站群服务器。其中比较吸引到我们用户的是亚洲节点的包括香港、日本等七星级网络服务。具体我们看看相关的配置和线路产品。第一、香...
mergesort为你推荐
贸易配额进出口配额是怎么回事情?财务系统软件常用财务软件有哪些?windowsmediaWindows Media Player什么意思webservice框架java Webservice都有哪几种方式啊,哪种方式比较好啊多看论坛kindle哪个型号最好用怎么查微信注册时间微信号用了多久,怎么知道aviconverter跪求AVIConverter V1.0下载地址pass是什么锒行卡上的闪付pass是什么意思?网页背景音乐代码网页背景音乐代码,我要哪怕转换网页都不间断的那种元宝汇为什么我喝汇圆肾宝喝的阳痿了?
免费网站空间申请 域名注册中心 万网域名空间 jsp主机 512au 789电视网 1g内存 新睿云 东莞主机托管 lamp什么意思 美国迈阿密 空间服务器 国外免费云空间 腾讯网盘 闪讯网 密钥索引 zcloud hosting24 sonya hosts文件修改 更多