求!C语言一维数组编程:在一维数组中查找一个指定的值,找到返回其位置序号,未找到返回0。 5
在一个已经排好序的一维数组中,查找一个指定的值,如果找到,返回该元素在数组中的位置序号,否则返回0。...
在一个已经排好序的一维数组中,查找一个指定的值,如果找到,返回该元素在数组中的位置序号,否则返回0。
展开
1个回答
展开全部
给你找一个C语言的折半查找法,解决这种任务的第一算法
http://baike.baidu.com/view/610605.htm?from_id=9796273&type=syn&fromtitle=%E6%8A%98%E5%8D%8A%E6%9F%A5%E6%89%BE&fr=aladdin
C语言数组下标从 0 开始 找不到应该返回-1
C语言代码
intBinSearch(SeqList*R,intn,KeyTypeK)
{
//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
intlow=0,high=n-1,mid;//置当前查找区间上、下界的初值
if(R[low].key==K)
returnlow;
if(R[high].key==k)
returnhigh;
while(low<=high)
{
//当前查找区间R[low..high]非空
mid=low+((high-low)/2);
//使用(low+high)/2会有整数溢出的问题
//(问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时,
//这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2)不存在这个问题
if(R[mid].key==K)
returnmid;//查找成功返回
if(R[mid].key>K)
high=mid-1;//继续在R[low..mid-1]中查找
else
low=mid+1;//继续在R[mid+1..high]中查找
}
if(low>high)
return-1;//当low>high时表示查找区间为空,查找失败
}//BinSeareh
修改了下 适应数组
intBinSearch(int *R,intn,KeyTypeK)
{
//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
intlow=0,high=n-1,mid;//置当前查找区间上、下界的初值
if(R[low]==K)
returnlow;
if(R[high]==k)
returnhigh;
while(low<=high)
{
//当前查找区间R[low..high]非空
mid=low+((high-low)/2);
//使用(low+high)/2会有整数溢出的问题
//(问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时,
//这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2)不存在这个问题
if(R[mid]==K)
returnmid;//查找成功返回
if(R[mid]>K)
high=mid-1;//继续在R[low..mid-1]中查找
else
low=mid+1;//继续在R[mid+1..high]中查找
}
if(low>high)
return-1;//当low>high时表示查找区间为空,查找失败
}//BinSeareh
http://baike.baidu.com/view/610605.htm?from_id=9796273&type=syn&fromtitle=%E6%8A%98%E5%8D%8A%E6%9F%A5%E6%89%BE&fr=aladdin
C语言数组下标从 0 开始 找不到应该返回-1
C语言代码
intBinSearch(SeqList*R,intn,KeyTypeK)
{
//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
intlow=0,high=n-1,mid;//置当前查找区间上、下界的初值
if(R[low].key==K)
returnlow;
if(R[high].key==k)
returnhigh;
while(low<=high)
{
//当前查找区间R[low..high]非空
mid=low+((high-low)/2);
//使用(low+high)/2会有整数溢出的问题
//(问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时,
//这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2)不存在这个问题
if(R[mid].key==K)
returnmid;//查找成功返回
if(R[mid].key>K)
high=mid-1;//继续在R[low..mid-1]中查找
else
low=mid+1;//继续在R[mid+1..high]中查找
}
if(low>high)
return-1;//当low>high时表示查找区间为空,查找失败
}//BinSeareh
修改了下 适应数组
intBinSearch(int *R,intn,KeyTypeK)
{
//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
intlow=0,high=n-1,mid;//置当前查找区间上、下界的初值
if(R[low]==K)
returnlow;
if(R[high]==k)
returnhigh;
while(low<=high)
{
//当前查找区间R[low..high]非空
mid=low+((high-low)/2);
//使用(low+high)/2会有整数溢出的问题
//(问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时,
//这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2)不存在这个问题
if(R[mid]==K)
returnmid;//查找成功返回
if(R[mid]>K)
high=mid-1;//继续在R[low..mid-1]中查找
else
low=mid+1;//继续在R[mid+1..high]中查找
}
if(low>high)
return-1;//当low>high时表示查找区间为空,查找失败
}//BinSeareh
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询