归并排序:是将两个或者多个有序记录序列合并成一个有序序列。归并方法有很多种。一次对两个有序记录序列进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。简介一下二路归并的基本方法:
(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");
}
结果: