二分法在循环列表中查找数据

散步的魚 2010-10-26 12:00:27
用二分法可行吗,思路是先判断在上半段或下半段,然后一直这样判断下去
代码如下,请问如何进行修改
另外 怎样在上面增加一个查找结果输出提示 messagebox什么的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace search
{
public partial class Form1 : Form
{
private int id = 0;

public Form1()
{
InitializeComponent();
}

private void textBox1_TextChanged(object sender, EventArgs e)//读取输入数据
{
id = Convert.ToInt32(textBox1.Text);
}

private void button1_Click(object sender, EventArgs e)//开始查找
{
int data = id;
}

private int search(int data, int[] array)//二分法
{
int low = 0;
int high = array.Length;
int mid;
while (low != high)
{
mid = (low + high) / 2;
if (array[mid] == data) return data;
else
{
if (array[mid] > data) { high = mid - 1; }
else if (array[mid] < data) { low = mid + 1; }
}
}
return 0;
}
}
}

要查找的表是一个循环表 len是一定的 超出部分会从low位开始覆盖 一直这样循环下去
...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloodish 2010-10-26
  • 打赏
  • 举报
回复
1) while (low != high) 改成 while(low <= high)
return 0; 改成 return -1;//表示找不到

2) MessageBox
private void button1_Click(object sender, EventArgs e)//开始查找
{
int data = id;
int[] array= {1,2,3};
int location = search(id,array);
if(location>=0)
{
MessageBox.Show("找到的提示");
}
else
{
MessageBox.Show("找不到的提示");
}
}
wuyq11 2010-10-26
  • 打赏
  • 举报
回复
linq from q in arr where ..查找很方便
二分法数据结构上算法很全面
大腹 2010-10-26
  • 打赏
  • 举报
回复
关注复内容太短了!
wuhan_dotnet 2010-10-26
  • 打赏
  • 举报
回复
你的Data是int型的数据,MessageBox里也只有转成string 再显示咯

private void button1_Click(object sender, EventArgs e)//开始查找
{
int data = id;
int[] array = { 1, 2, 3 ,4};//数组列表
int location = search(id, array);
if (location >= 0)
{
MessageBox.Show(location.ToString()+被查找出来!, "查找结果");//显示查找到的数据
}
else
{
MessageBox.Show("表中不存在您要查找的数据", "查找结果");
}
}


散步的魚 2010-10-26
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace search
{
public partial class Form1 : Form
{
private int id;

public Form1()
{
InitializeComponent();
}

private void textBox1_TextChanged(object sender, EventArgs e)//输入查找数据
{
id = Convert.ToInt32(textBox1.Text);
}

private void button1_Click(object sender, EventArgs e)//开始查找
{
int data = id;
int[] array = { 1, 2, 3 ,4};//数组列表
int location = search(id, array);
if (location >= 0)
{
MessageBox.Show("....", "查找结果");//显示查找到的数据
}
else
{
MessageBox.Show("表中不存在您要查找的数据", "查找结果");
}
}

private int search(int data, int[] array)//二分法
{
int low = 0;
int high = array.Length;
int mid;
while (low != high)
{
mid = (low + high) / 2;
if (array[mid] == data) return data;//返回查找到的值
else
{
if ((array[mid] > data && array[low] < data) || (array[mid] < data && array[high] < data))
{ high = mid - 1; }
else if ((array[mid] < data && array[high] > data) || (array[mid] > data && array[low] > data))
{ low = mid + 1; }
}
}
return -1;
}
}
}


修改后的代码 请问如何才能将查找出来的data在messagebox中显示出来

111,129

社区成员

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

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

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