首页 > 学院 > 开发设计 > 正文

归并排序

2019-11-10 21:54:27
字体:
来源:转载
供稿:网友
#include<stdio.h>//归并排序/*要点:归并是将两个或多个有序记录序列合并成一个有序数列。归并方法有多种,一次对两个有序记录序列进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。本实例是二路归并排序。基本方法是:1、将n个记录看成是n个长度为1的有序子表2、将两两相邻的有序子表进行归并3、重复执行步骤2,知道归并成一个长度为n的有序子表*/void merge(int r[],int s[],int x1,int x2,int x3) //实现一次归并排序{ int i,j,k; i=x1; //第一部分的开始位置 j=x2+1; //第二部分的开始位置 k=x1; while((i<=x2)&&(j<=x3)) //当i和j都在两个要合并的部分中时 //筛选两部分中较小的元素放到数组s中 if(r[i]<=r[j]) { s[k]=r[i]; i++; k++; } else { s[k]=r[j]; j++; k++; } while(i<=x2) //将x1~x2范围内未比较的数顺次加到数组r中 s[k++]=r[i++]; while(j<=x3) //将x2+1~x3范围内未比较的数顺次加到数组r中 s[k++]=r[j++];}void merge_sort(int r[],int s[],int m,int n){ int p; int t[20]; if(m==n) s[m]=r[m]; else { p=(m+n)/2; merge_sort(r,t,m,p); //递归调用merge_sort()函数将r[m]~r[p]归并成有序的t[m]~t[p] merge_sort(r,t,p+1,n); //递归调用merge_sort()函数将r[p+1]~r[n]归并成有序的t[p+1]~t[n] merge(t,s,m,p,n); //调用函数将前两部分归并到s[m]~s[n] }}void main(){ int a[11]; int i; PRintf("请输入10个数:/n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); merge_sort(a,a,1,10); printf("排序后的顺序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n");}

end MrBread 2017-02-06


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表