1.题目
设计合并排序算法实现对N个整数排序
2.设计思路
先将无序序列利用分治法划分为子序列,直至每个子序列只有一个元素,然后再对有序子序列逐步进行合并排序。合并方法是循环的将两个有序子序列当前的首元素进行比较,较小的元素取出,置入合并序列的左边空置位,直至其中一个子序列的最后一个元素置入合并序列中。最后将另一个子序列的剩余元素按顺序逐个置入合并序列尾部即可完成排序。
文章来源:https://www.toymoban.com/news/detail-551482.html
3.源代码
#include<stdio.h>
#define MAX 100
int B[MAX];
int Merge(int A[],int n)
{
int mid,s1,s2,i,b;
mid=n/2;
s1=0;s2=mid;
b=0;
while(s1<mid&&s2<n)
if(A[s1]<=A[s2])
B[b++]=A[s1++]; //如果首元素值小于等于中间值就把该值赋到B集合内
else
B[b++]=A[s2++]; //否则就把中间值赋给B集合
if(s1<mid)
for(i=s1;i<mid;i++) //从0到n/2开始循环
B[b++]=A[i];
else
for(i=s2;i<n;i++)
B[b++]=A[i];
for(i=0;i<n;i++)
A[i]=B[i];
return 1;
}
int MergeSort(int A[],int n)
{
if(n<=1)
return 1; //如果n等于0或1则无法排序返回主调函数
else
{
MergeSort(A,n/2);
MergeSort(A+n/2,n-n/2);
Merge(A,n);
return 1;
}
}
int main()
{
int a[1000],n,i;
scanf("%d",&n); //所输入的元素个数
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //输入元素
}
MergeSort(a,n); //对所输入的元素进行排序
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
return 0;
}
4.运行结果分析
输入元素个数:8
输入要排序的数组:67 44 6 98 23 21 45 66
排好序的数组:6 21 23 44 45 66 67 98 文章来源地址https://www.toymoban.com/news/detail-551482.html
到了这里,关于设计合并排序算法实现对N个整数排序。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!