二分法查找

本文转至:http://blog.csdn.net/fengyarongaa/article/details/6563184

 

[c-sharp] view plain copy print ?
  1. /// <summary> 
  2.         /// 二分查找算法 
  3.         /// </summary> 
  4.         /// <param name="arr">要查找的数组</param> 
  5.         /// <param name="sel">要查找的值</param> 
  6.         /// <returns></returns> 
  7.         protected string GetValue(string[] arr, string sel) 
  8.         { 
  9.             int langth = arr.Length;//数组的长度 
  10.             int min = 0;//要查找的数组的下限 
  11.             int max = langth - 1;//要查找的数组的上限 
  12.             int index = (max - min) / 2 + min;//要查找的索引 
  13.             string returnValue = "";//最后要返回的值 
  14.             int flag = 0;//比较的时候,之前的那个index 
  15.             if (int.Parse(sel) == int.Parse(arr[min].ToString())) 
  16.             { 
  17.                 returnValue = "最小值和要查的值一样,是:" + min.ToString(); 
  18.             } 
  19.             else if (int.Parse(sel) == int.Parse(arr[max].ToString())) 
  20.             { 
  21.                 returnValue = "最大值和要查的值一样,是:" + max.ToString(); 
  22.             } 
  23.             else if (int.Parse(sel) > int.Parse(arr[langth - 1].ToString()))
  24.             { 
  25.                 returnValue = "大于最大值了"
  26.             } 
  27.             else if (int.Parse(sel) < int.Parse(arr[0].ToString())) 
  28.             { 
  29.                 returnValue = "小于最小值了"
  30.             } 
  31.             else 
  32.             { 
  33.                 do 
  34.                 { 
  35.                     if (int.Parse(arr[index].ToString()) == int.Parse(sel)) 
  36.                     { 
  37.                         returnValue += "找到了:" + arr[index].ToString() + " 
  38. "; 
  39.   
  40.                     } 
  41.                     else if (int.Parse(arr[index].ToString()) > int.Parse(sel)) 
  42.                     { 
  43.                         max = index; 
  44.                         flag = index; 
  45.                         index = (max - min) / 2 + min; 
  46.                         returnValue += "是数组中的" + arr[flag].ToString() + "和" + sel + "比较,数组的比较值大了,找前面一个表:" + arr[min].ToString() + "到" + arr[max].ToString() + " 
  47. "; 
  48.                     } 
  49.                     else if (int.Parse(arr[index].ToString()) < int.Parse(sel)) 
  50.                     { 
  51.                         min = index; 
  52.                         flag = index; 
  53.                         index = (max - min) / 2 + min; 
  54.                         returnValue += "是数组中的" + arr[flag].ToString() + "和" + sel + "比较,数组的比较值小了,找后面一个表:" + arr[min].ToString() + "到" + arr[max].ToString() + " 
  55. "; 
  56.                     } 
  57.                     if (max - min <= 1) 
  58.                     { 
  59.                         returnValue += "找不到"
  60.                         break
  61.                     } 
  62.                 } while (int.Parse(arr[index].ToString()) != int.Parse(sel)); 
  63.             } 
  64.   
  65.             //防止那种,在更改过索引值之后,正好索引的值和要查找的值相等的情况 
  66.             if (int.Parse(arr[index].ToString()) == int.Parse(sel)) 
  67.             { 
  68.                 returnValue += "找到了:" + index.ToString() + " 
  69. "; 
  70.             } 
  71.   
  72.             return returnValue; 
  73.         }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值