快速查找归并排序(归并明天再写出来吧,今天出了点问题)

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

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

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值