#include<iostream.h>
intn;
//将两个已经排好序的子序列A[P..Q]和A[P+1..R]合并成一个已排好序的子序列A[P..R]
voidmerge(intA[],intp,intq,intr)
{
inti,j,t;
int*temp=newint[n];//用来暂存合并后的序列
t=p;//序列temp的下标计数器,从p开始
i=p;//左子序A[P..Q]的下标计数器,从p开始
j=q+1;//右子序A[Q+1..R]的下表计数器,从q+1开始
//合并序列
while(t<=r)
if(i<=q&&(j>r||A[i]<=A[j]))
temp[t++]=A[i++];
else
temp[t++]=A[j++];
//将temp中的序列赋值给A
for(i=p;i<=r;i++)
A[i]=temp[i];
delete[]temp;
}
//合并排序过程
voidmergeSort(intA[],intp,intr)
{
intq;
if(p!=r)//若子序列A中不止一个元素
{
q=(int)((p+r-1)/2);//计算中间下标,将子序列A分为左子序列和右子序列
mergeSort(A,p,q);//对左子序列进行合并排序
mergeSort(A,q+1,r);//对右子序列进行合并排序
merge(A,p,q,r);//对左子序类和右子序列进行合并
}
}
//主程序
intmain()
{
while(cin>>n)
{
inti,*A=newint[n];
for(i=0;i<n;i++)
cin>>A[i];
mergeSort(A,0,n-1);
for(i=0;i<n;i++)
i==n-1?cout<<A[i]<<endl:cout<<A[i]<<"";
delete[]A;
}
return0;
}
分享到:
相关推荐
/************合并排序算法的实现******************/ int main() { int p,q,r; printf("合并排序算法的实现:\n"); printf("请输入p、q、r的值(输入格式1,12,13):"); scanf("%d,%d,%d",&p,&q,&r); printf("p=%...
Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘...
自然合并排序算法,对合并排序算法进行进一步的优化
自底向上合并排序算法 ,望对大家有帮助,谢谢!
合并排序算法的C语言实现,在VC开发环境下验证通过
该合并排序算法是java实现用分治策略实现对n个元素进行排序的算法!其基本思想是:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。
使用matlab编写的合并排序法,merge_main为示例主函数,merge_func为调用排序的求解函数
合并排序算法和二分搜索技术算法的实现实验报告.doc
合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过
合并排序算法C语言源程序,合并排序算法就是将多个有序数据表合并成一个有序数据表,进行两两合并和数据大小比较,算法程序亲测可用。
c++实现的合并排序算法 用递归和非递归两种方式实现的
之前所介绍的排序法都是在同一个阵列中的排序,考虑今日有两笔或两笔以上的资料,它可能是不同阵列中的资料,或是不同档案中的资料,如何为它们进行排序?
使用插入排序算法对输入的n个整数,按照从小到大的顺序排序。 Input Description 第一行输入一个整数n(0)。 第二行输入n个整数。 Output Description 输出排序后的整数,每个整数之间以一个空格分隔。注意:最后...
title = new JLabel("合并排序算法演示的课程设计。。。"); //title.setForeground(Color.red); title.setForeground(Color.blue); title.setFont(new Font("新宋体",Font.BOLD,40)); title.setBounds(70,100,...
合并排序算法 C 语言 visio studio2010合并排序算法 C 语言 visio studio2010
分治法求解排序问题 合并为其中一种 效率不错 时间复杂度为O nlogn 代码有本人大量解释 便于理解
一种快速的排序法—插入合并排序法一种快速的排序法—插入合并排序法