Algorithm--二分搜索

       之前对hanoi塔的递归一直感到很恐惧,我记得原教材上花了好几张纸来描述和解释,一眼望去,满页的伪代码...回过头再看看,发现理解了它的主要思想,写起来是比较容易的,但是精髓至今仍唏嘘不已。那个将三个柱子作为参数并有选择性的调换位置来实现中转作用的方法,我觉得在没有前人脚印的指引下是很难想到的~废话少说。hanoi塔的代码网上很多,就不贴了。主要是理解思想,思想!!

        这次要说的是二分搜索。即在有序数列中查找确定数值的一种分治算法,代码如下:

     class  BinarySearch
    
{
        
private int equalIndex;
        
private int indexAdded;

        
public int EqualIndex
        
{
            
get
            
{
                
return equalIndex;
            }

        }


        
public BinarySearch()
        
{
            equalIndex 
= 0;
        }


        
public void Search(int n, List<int> list)
        
{
            
int center = list.Count / 2;

            
if (n == list[center])
            
{
                equalIndex 
= center + indexAdded;
                
return;
            }

            
else
            
{
                
if (n < list[center])
                
{
                    Search(n, list.GetRange(
0, center));
                }

                
else
                
{
                    indexAdded 
+= center + 1;
                    Search(n, list.GetRange(center 
+ 1, list.Count - center - 1));
                    
                }

            }

        }

    }

       这里要注意的是,为了确保返回的位置是在原整个list中的位置,indexAdded的加入很重要。                                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值