归并排序
归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路
#include<stdio.h>
typedef int Elemtype;
int Merge(Elemtype a[],Elemtype b[],int startindex,int midindex,int endindex){//子序列的排序
int i=startindex,j=midindex+1,k=startindex;
while(i<=midindex&&j<=endindex){
if(a[i]>a[j]){
b[k++]=a[i++];
}else{
b[k++]=a[j++];
}
}
while(i<=midindex){
b[k++]=a[i++];
}
while(j<=endindex){
b[k++]=a[j++];
}
for(i=startindex;i<=endindex;i++){
a[i]=b[i];
}
}
int MergeSort(Elemtype a[],Elemtype b[],int startindex,int endindex){//待排序序列分组
int midindex;
if(startindex<endindex){
midindex=(startindex+endindex)/2;
MergeSort(a,b,startindex,midindex);
MergeSort(a,b,midindex+1,endindex);
Merge(a,b,startindex,midindex,endindex);
}
}
int main(){
Elemtype a[11];
Elemtype b[11];
int len =10;
for(int i=0;i<len;i++){
scanf("%d",&a[i]);
}
MergeSort(a,b,0,len-1);
for(int i=0;i<len;i++){
printf("%d=%d\\n",i,a[i]);
}
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!