1.題目
??設(shè)計(jì)合并排序算法實(shí)現(xiàn)對N個(gè)整數(shù)排序
2.設(shè)計(jì)思路
??先將無序序列利用分治法劃分為子序列,直至每個(gè)子序列只有一個(gè)元素,然后再對有序子序列逐步進(jìn)行合并排序。合并方法是循環(huán)的將兩個(gè)有序子序列當(dāng)前的首元素進(jìn)行比較,較小的元素取出,置入合并序列的左邊空置位,直至其中一個(gè)子序列的最后一個(gè)元素置入合并序列中。最后將另一個(gè)子序列的剩余元素按順序逐個(gè)置入合并序列尾部即可完成排序。文章來源:http://www.zghlxwxcb.cn/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集合內(nèi)
else
B[b++]=A[s2++]; //否則就把中間值賦給B集合
if(s1<mid)
for(i=s1;i<mid;i++) //從0到n/2開始循環(huán)
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則無法排序返回主調(diào)函數(shù)
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); //所輸入的元素個(gè)數(shù)
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //輸入元素
}
MergeSort(a,n); //對所輸入的元素進(jìn)行排序
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
return 0;
}
4.運(yùn)行結(jié)果分析
輸入元素個(gè)數(shù):8
輸入要排序的數(shù)組:67 44 6 98 23 21 45 66
排好序的數(shù)組:6 21 23 44 45 66 67 98 文章來源地址http://www.zghlxwxcb.cn/news/detail-551482.html
到了這里,關(guān)于設(shè)計(jì)合并排序算法實(shí)現(xiàn)對N個(gè)整數(shù)排序。的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!