#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;
}
分享到:
相关推荐
本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...
以下是对自底向上合并排序算法的详细步骤: 1. **初始化**:假设我们有一个包含n个元素的数组A。我们将数组视为n个长度为1的子数组,即每个元素本身就是一个有序的子数组。 2. **合并阶段**:从长度为1的子数组...
/************合并排序算法的实现******************/ 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语言实现的关键步骤,以及如何验证程序的正确性。 合并排序的核心思想是将大问题分解为小问题,再将解决小问题的结果合并,最终得到大问题的解决方案。具体到排序,就是将...
合并排序算法的C语言实现,在VC开发环境下验证通过
在提供的压缩包文件中,很可能是包含了实现合并排序算法的代码。代码可能包括以下几个关键部分: 1. **函数定义**:定义一个名为`merge_sort`的函数,接受一个列表作为参数。 2. **基本情况**:检查列表长度是否为1...
基于上述分析,可以得出结论:如果设计一种排序算法,使得在数据集大小n≤23时采用插入排序,而在n>23时采用合并排序,则该算法的整体性能将优于单一的合并排序算法。 #### 算法设计原理 插入合并排序法的基本思路...
在实验中,程序会根据预设的规模(如宏定义的 N)随机生成整数数组,然后使用合并排序算法对其进行排序。 2. **实验目的**: - 熟悉和理解分治算法的基本概念和应用。 - 掌握合并排序的实现细节,包括如何分割...
合并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要特点是稳定且具有较高的时间效率。在本文中,我们将深入探讨合并排序的工作原理、Java实现细节以及其优势和适用场景。 ### 合并排序的基本思想 ...
合并排序算法和二分搜索技术算法的实现实验报告.doc
合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过
c++实现的合并排序算法 用递归和非递归两种方式实现的
合并排序算法是一种高效的排序算法,基于“分治”策略,由计算机科学家John W. Hoare在1960年提出。这种算法将一个大问题分解为小问题来解决,然后将小问题的解合并,得到原问题的解。在排序过程中,合并排序将一个...
合并排序是一种高效的、基于分治...整个程序就是这样实现了合并排序算法,其时间复杂度为O(n log n),空间复杂度为O(n)(如果考虑额外的合并空间需求)。这个C++程序展示了如何利用分治法高效地对大规模数据进行排序。
合并排序算法、快速排序算法和递归分治是计算机科学中的基础概念,它们在数据处理和算法设计中占据着重要地位。以下是对这些知识点的详细解释: **合并排序算法(Merge Sort)** 合并排序是一种基于分治策略的排序...
合并排序算法是一种经典的排序算法,由计算机科学家John W. Backus在1959年提出。它的主要思想是采用分治法(Divide and Conquer)将大问题分解为小问题来解决。在这个过程中,我们将一个大的序列拆分为两个或多个小...