二分查找(BinarySearch)和快速排序(QuickSort)

本文详细介绍了二分查找的原理与应用,包括尾递归和循环形式的伪代码,强调了递归过程中边界条件的重要性。在Java中,可以使用Arrays.binarySearch进行便捷的二分查找。此外,还讲解了快速排序的分治思想,给出了基本的快速排序伪代码,并讨论了随机化技术如何改善最坏情况的时间复杂度。
摘要由CSDN通过智能技术生成

二分查找(BinarySearch)

  二分查找用于在一个有序数组中,查找是否存在目标值,是分治法思维的体现,把大问题对半平分成两个小问题。
  下面是尾递归形式的二分查找的伪代码,如果找到,则返回在array中的索引,如果没有找到,就返回-1。

// java
Int BinarySearch(int[] array, int lo, int hi, int key) // 分别是待查找的数组,下限,上限,目标值。
    if (hi<lo) return -1;
    mid = lo + (hi-lo)//2;   # 这里//表示商取整
    if (a[mid] == key):
         return mid;
    if (a[mid] < key):
         return BinarySearch(array, key, mid+1, hi);
    if (a[mid] > key):
         return BinarySearch(array, key, lo, mid-1);

  尾递归可以很轻松的写成while循环形式,下面是循环形式的二分查找伪代码。

// java
Int BinarySearch(int[] array, int key)
    lo = 0;
    hi = array.length-1;
    while (hi>=lo) 
        mid = lo + (hi-lo)//2;   # 这里//表示商取整
        if (a[mid] == key):
             return mid;
        if (a[mid] < key):
             lo = mid+1;
        if (a[mid] > key):
             hi = mid-1;
    return -1;

  把一个大问题平分成两个小问题,设大问题需要的时间是 T ( n ) T(n) T(n),则小问题的时间是 T ( n 2 ) T(\frac{n}{2}) T(2n),所以递归关系式是 T (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值