二分查找面试题

昨天面试有一个二分查找的题目,题目大致是有随机生成100个整数,用二分查找法找出一个数字在这个100个数中的位置。当时二选一没有选择这道题目,今天早上起床做了一遍,以下是大致代码:

    protected void Page_Load(object sender, EventArgs e)

    {

        int[] thisdata = data();

        foreach(int a in thisdata)

        {

            Response.Write(a + " ");   

        }

        Response.Write("<br/>");

        thisdata = sorted(thisdata);

        foreach (int a in thisdata)

        {

            Response.Write(a + " ");

        }

        Response.Write("<br/>");

 

        int result = BinarySearch(thisdata, 0, thisdata.Length - 1, 10);

        Response.Write(result);

    }

 

    /// <summary>

    /// 10个随机数组生成

    /// </summary>

    /// <returns></returns>

    private int[] data()

    {

        Random rd = new Random();

        int[] result = new int[10];

        for (int i = 0; i < result.Length; i++)

        {

            result[i] = rd.Next(15);

        }

 

        return result;

    }

 

    /// <summary>

    /// 对数组data进行由小到大排序

    /// </summary>

    /// <param name="data"></param>

    /// <returns></returns>

    private int[] sorted(int[] data)

    {

        int temp=0;

        for (int i = 0; i < data.Length; i++)

        {

            for (int j = i + 1; j < data.Length; j++)

            {

                if (data[j] < data[i])

                {

                    temp = data[i];

                    data[i] = data[j];

                    data[j] = temp;

                }

            }

        }

        return data;

    }

 

    /// <summary>

    /// 二分查找

    /// </summary>

    /// <param name="data"></param>

    /// <param name="start"></param>

    /// <param name="end"></param>

    /// <param name="key"></param>

    /// <returns></returns>

    private int BinarySearch(int[] data, int start, int end, int key)

    {

        int result = -1;

        if (start >= end && data[end] == key)

        {

            result = end;

        }

        else if (start == end && data[end] != key)

        {

            return result;

        }

        else

        {

            int newend = (start + end) / 2;

            if (data[newend] == key)

                result = newend;

            else

                result = ((key < data[newend]) ? BinarySearch(data, start, newend - 1, key) : BinarySearch(data, newend + 1, end, key));

        }

 

        return result;

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值