问一个折半查找的算法题 (c#)

wscbzz 2008-09-25 05:02:23
编写一个算法,利用折半查找算法在一个有序表中插入一个记录(关键码为x),并保持表的有序性.
哪位兄弟帮我答,答出来啦就马上送分
...全文
638 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
何宏琳 2010-03-30
  • 打赏
  • 举报
回复
看了,,很好。
lw4638 2009-06-01
  • 打赏
  • 举报
回复
不错,很有启发性
cc_net 2008-09-25
  • 打赏
  • 举报
回复
你可以写一串数字,用我上面算法试下,应该是对的.
主要是找到要插入的数字的位置,应该就是low>high时low的位置
hflkl1314 2008-09-25
  • 打赏
  • 举报
回复
回帖是一种美德!传说每天回帖即可获得 10 分可用分!
cc_net 2008-09-25
  • 打赏
  • 举报
回复
大概下面这样吧,没验证不知道是不是完全正确
insert(pos)是另外实现的一个函数,是用来插入x的,其中pos是要插入的x的位置
low是低位,high是高位,num是要插入的数字,src是原来的有序数组


public static void BinSearch(int[] src,int num,int low,int high)
{
//如果没找到相等的,这个时候low>high.这个时候num要插入到low的位置,有3种情况
//1:low在数组最后一个值的下一个位置;2:low在数组的第一个位置;3:在数组中
//所以insert(pos)在第一种情况是要扩大数组,在2,3情况下,要扩大数组并移动low位置后的元素,所以改用链表会方便点
if(low>high)
{
insert(low);
return;
}

int mid;
mid = (low+high)/2;

//如果找到相同值,就插入到当前位置
if(Convert.ToInt32(src[mid]) == num)
{
insert(mid);
return;
}
//如果查找的比实际的小,low =mid +1,继续递归
if(Convert.ToInt32(src[mid]) < num)
{
BinSearch(src,num,mid+1,high);
}
//如果查找的比实际的大,high =mid -1,继续递归
if(Convert.ToInt32(src[mid]) > num)
{
BinSearch(src,num,low,mid-1);
}

}
b3727180 2008-09-25
  • 打赏
  • 举报
回复
關注!
yilanwuyu123 2008-09-25
  • 打赏
  • 举报
回复
mark

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧