设计合并排序算法实现对N个整数排序。
1.题目
设计合并排序算法实现对N个整数排序
2.设计思路
先将无序序列利用分治法划分为子序列,直至每个子序列只有一个元素,然后再对有序子序列逐步进行合并排序。合并方法是循环的将两个有序子序列当前的首元素进行比较,较小的元素取出,置入合并序列的左边空置位,直至其中一个子序列的最后一个元素置入合并序列中。最后将另一个子序列的剩余元素按顺序逐个置入合并序列尾部即可完成排序。
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
下一篇:
选择排序、归并排序、快速排序