折中查找法 +选择法排序 C语言

#include
void sort(int b[],int n)
{
	int i,j,k,temp;
	for(i=0;i<=n-2;i++)
	{
		k=i;
		temp=b[i];
		for(j=i+1;j<=n-1;j++)
		{
			if(temp>b[j])
			{
				temp=b[j];
				k=j;
			}
		}
		temp=b[i];
		b[i]=b[k];
		b[k]=temp;
	}
}
int main()
{
	int a[100], n,i;
	printf("请输入数组的长度:\n");
	scanf("%d",&n);
	printf("请输入你的数组:\n");
	for(i=0;i<=n-1;i++)
	scanf("%d",&a[i]);
	sort(a,n);
	int left,right,mid,k;
	printf("请输入你想查找的数:\n");
	scanf("%d",&k);
	left=0,right=n-1;
	mid=(left+right)/2;
	while(left<=right)
	{
		if(ka[right])
		{
			printf("wrong\n");
			break;
		}
		if(k==a[left])
		{
			printf("%d is 第%d个",k,left+1);
			break;
		}
		if(k==a[right])
		{
			printf("%d is 第%d个",k,right+1);
			break;
		}
		if(k==a[mid])
		{
			printf("%d is 第%d个",k,mid+1);
			break;
		}
		if(ka[mid])
		{
			left=mid+1;
			mid=(left+right)/2;
		}
	}
	return 0;
}

对于折中查找某一数字,首先应该将数组进行排序,要么升序或者降序排序,排完序之后,就可以进行查找,所谓折中查找,即每次都缩小一半的查找范围,但是应该注意的是每次应该判断所要查找的数是否在所在的数组内,即每次查找前应该进行判断,然后再判断所要查找的数是否在每一阶段的开头或结尾,即a[left]或者a[right],a[mid],注意循环结束应该是left<=right,此时两端相遇,这是一种重要的思想。

你可能感兴趣的:(算法,数据结构,c语言)