算法-二分查找算法(OC、Swift、Python)

前言

二分查找在程序開發過程當中是十分常見的算法,也是在程序員面試過程當中關於算法的知識點考察過程當中最常問的知識點;二分查找在實際開發過程當中也經常用的到;就好比在一個一維有序數組中查找最大的一個數;咱們能夠每次都和數組中間的元素對比,而後縮小查找範圍。python

二分查找是一個很是快速高效的查找算法,由於每次查找數據查找空間都會被縮小爲原理數組長度的一半,直到查找空間爲空,才結束查找。git

可是二分查找針對的是有序數組,並且是那種不常常變更數組;還有就是要是數據的數據量比較小,也不是適合用二分查找,畢竟遍歷一次就夠了,相對於去處理數據量比較大的數組時,二分查找的優點就比較明顯了!程序員

代碼

這裏我放上OC、Swift和Python的二分查找的代碼,以便你們學習交流。github

OC

- (NSInteger)halveSearch:(NSArray *)array target:(id)target{
    if(array.count == 0){
        return -1;
    }
    //標記區間的開始小標
    NSInteger start = 0;
    //標記區間結束的下標
    NSInteger end = array.count - 1;
    //標記區間中間的下標
    NSInteger middle = 0;
    
    while (start < end - 1) {
        //取區間數組裏面的中間下標
        middle = start + (end - start) / 2;
        
        //中間值大於目標值
        if([array[middle] integerValue] > [target integerValue]){
            //目標值在中間值前面,將中間值賦給end做爲最後一個值,在前面進行搜索取值
            end = middle;
        }else{
            //中間值小於目標值
            //將中間值賦給start做爲開始值,在後面一段進行搜索
            start =  middle;
        }
        
        //若是起始值等於目標值
        if ([array[start] integerValue] == [target integerValue]) {
            return start;
        }
        
        //若是結束值等於目標值
        if ([array[end] integerValue] == [target integerValue]) {
            return end;
        }
    }
    
    return -1;
}

Swift

func halveSearch(_ array: Array<Any>, target: NSInteger) -> NSInteger {
        if array.count == 0{
            return -1
        }
        //標記區間的開始小標
        var start = 0
        //標記區間結束的下標
        var end = array.count - 1
        //標記區間中間的下標
        var middle = 0
        
        while start < end - 1 {
            //取區間數組裏面的中間下標
            middle = start + (end - start) / 2
            
            //中間值大於目標值
            if (array[middle] as AnyObject).integerValue > target{
                //目標值在中間值前面,將中間值賦給end做爲最後一個值,在前面進行搜索取值
                end = middle
            }else{
                //中間值小於目標值
                //將中間值賦給start做爲開始值,在後面一段進行搜索
                start =  middle
            }
            
            //若是起始值等於目標值
            if (array[start] as AnyObject).integerValue == target{
                return start
            }
            
            //若是結束值等於目標值
            if (array[end] as AnyObject).integerValue == target{
                return end
            }
        }
        
        return -1
    }

Python

def halveSearch(array, target):
    if len(array) == 0:
        return -1

    # 標記區間的開始小標
    start = 0
    # 標記區間結束的下標
    end = len(array) - 1
    # 標記區間中間的下標
    middle = 0

    while start < end - 1:
        # 取區間數組裏面的中間下標
        middle = int(start + (end - start) / 2)

        # 中間值大於目標值
        if array[middle] > target:
            # 目標值在中間值前面,將中間值賦給end做爲最後一個值,在前面進行搜索取值
            end = middle
        else:
            # 中間值小於目標值
            # 將中間值賦給start做爲開始值,在後面一段進行搜索
            start =  middle

        # 若是起始值等於目標值
        if array[start] == target:
            return start

        # 若是結束值等於目標值
        if array[end] == target:
            return end

    return -1

結束語

歡迎各位大神提出寶貴的意見和建議,也歡迎你們進羣交流365152048!面試

CSDN博客 https://zfj1128.blog.csdn.net
GITEE主頁 https://gitee.com/zfj1128
GITHUB主頁 https://github.com/zfjsyqk
相關文章
相關標籤/搜索