归并排序:是将两个或者多个有序记录序列合并成一个有序序列。归并方法有很多种。一次对两个有序记录序列进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。简介一下二路归并的基本方法:

(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");
}

结果: