归并排序:是将两个或者多个有序记录序列合并成一个有序序列。归并方法有很多种。一次对两个有序记录序列进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。简介一下二路归并的基本方法:
(1)将n个记录看成是n个长度的为1的有序子表。
(2)将两两相邻的有序子表进行归并。
(3)重复(2)步骤,直到归并成一个长度为n的有序表。
#include<stdio.h> 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)) if(r[i]<=r[j]) { s[k]=s[i]; i++; k++; } else { s[k]=s[j]; j++; k++; } while(i<=x2) s[k++]=r[i++]; while(j<=x3) 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,t,p+1,n); merge_sort(t,s,m,p,n); } } void main() { int a[11]; int i; printf("请输入十个数:\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"); }
上面的在merge_sort()函数中,merge_sort(t,s,m,p,n)为啥不能添加五个参数啊啊...
快速查找:
#include<stdio.h> void qusort(int s[],int start,int end) { int i,j; i=start; j=end; s[0]=s[start]; while(i<j) { while(i<j&&s[0]<s[j]) j--; if(i<j) { s[i]=s[j]; i++; } while(i<j&&s[i]<=s[0]) i++; if(i<j) { s[j]=s[i]; j--; } } s[i]=s[0]; if(start<i) qusort(s,start,j-1); if(i<end) qusort(s,j+1,end); } void main() { int a[11],i; printf("请输入10个数:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); qusort(a,1,10); printf("排序后的顺序是:\n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); }
结果: