C# 二分法(折半)查找数组最大最小值?

思嘉 2011-07-18 11:10:59
忘记了!请高人指点
...全文
379 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2011-07-18
  • 打赏
  • 举报
回复
lz,net类库中的集合类大都是带排序的,为什么非要自己写一个呢?
你是不是要完成老是布置的作业啊,呵呵。。。?
flyerwing 2011-07-18
  • 打赏
  • 举报
回复
直接LINQ.MAX就OK了.
qiuruonan 2011-07-18
  • 打赏
  • 举报
回复
//二分法查找元素k下标,如果元素存在,则返回其下标,不存在,返回-1
//调用时候,数组必须是已经从小到大已经排序好的数组
public static int BinarySearch(T[] a, int n,T k)
{
int low, high, mid;

low = 0;
high = n - 1;


mid = (low + high) / 2;

while (low <= high)
{


// if (a[mid] < k) low = mid + 1;


if (a[mid].CompareTo(k) < 0) low = mid + 1;

else if (a[mid].CompareTo( k)>0) high = mid - 1;

else break; //找到了

mid = (low + high) / 2;

}

if (low > high) mid = -1; //没有找到

return mid;



} //end BinarySeach


bdmh 2011-07-18
  • 打赏
  • 举报
回复
二分法是要去有序数列,不能是无序的,代码,百度找吧
xuexiaodong2009 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]

不需要二分法。

如果已经排过序,第一个和最后一个就是最大或最小值。
如果没有排过序,则直接遍历一次。因为每个元素都要检查一次,不然怎么知道它是不是最大最小值。
[/Quote]

如果已经排过序,第一个和最后一个就是最大或最小值。
如果没有排过序,则直接遍历一次。因为每个元素都要检查一次,不然怎么知道它是不是最大最小值。

二分法(折半的前提就是已经排过序了
gomoku 2011-07-18
  • 打赏
  • 举报
回复
不需要二分法。

如果已经排过序,第一个和最后一个就是最大或最小值。
如果没有排过序,则直接遍历一次。因为每个元素都要检查一次,不然怎么知道它是不是最大最小值。
Tragedy 2011-07-18
  • 打赏
  • 举报
回复
排序 取第一个和最后一个 即最大、最小
TimZhuFaith 2011-07-18
  • 打赏
  • 举报
回复
binarysearch前提就是已经排序完成。。。。
最简单的就是遍历数组,记录最大值最小值 比较当前值 并更新,直到数据结束!
貌似有个不用O(n)的算法。忘记了

111,097

社区成员

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

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

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