首页 > 代码库 > 合并排序
合并排序
描述
给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中两路合并排序算法进行排序,并输出排序最后结果的相应序列。
输入
共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000]
输出
一行,输出排序结果。
样例输入
7
48 36 68 72 12 48 2
样例输出
2 12 36 48 48 68 72
#include<stdio.h>#include<malloc.h>#define MaxSize 100void Merge(int source[],int start1,int end1,int start2,int end2){ int k=0; int i=start1; int j=start2; int m,n=0; int temp[100000]; while(i<=end1&&j<=end2) { if(source[i]<=source[j]) temp[k++]=source[i++]; else temp[k++]=source[j++]; } while(i<=end1) { temp[k++]=source[i++]; } while(j<=end2) { temp[k++]=source[j++]; } m=start1; for(;n<k;n++) { source[m++]=temp[n]; }}void MergeSort(int source[],int start,int end){ int mid; if(start<end) { mid=(start+end)/2; MergeSort(source,start,mid); MergeSort(source,mid+1,end); Merge(source,start,mid,mid+1,end); }}void main(){ int n,i=0; int source[100000]; scanf("%d\n",&n); while(i<n) { scanf("%d",&source[i++]); } MergeSort(source,0,n-1); for(i=0;i<n-1;i++) { printf("%d ",source[i]); } printf("%d\n",source[n-1]); }
合并排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。