图解算法

作者: zjxxx | 来源:发表于2019-08-26 13:32 被阅读0次

    1. 数据查找之二分法

    • 对象:数组
    • 使用前提:已排序数组
    • 时间复杂度:O(longn)

    如下图我们需要在已排序数组中寻找数字21,我们针对已经排过序的数组可以使用二分法来查找。

    大体思路为:

    找出现在数组顺序为中间位置(序号6)的值(56),用寻找到的数字和数组中间位置值去比较(图中数组中间的值为56,我们要寻找的是21,21<56),那我们寻找的值就在56左边部分的数组中,我们将这部分数组拿出来作为一个新的数组,继续新数组中间位置的值和需要寻找值的大小比较,通过这种比较,我们每次查找都可以将查找的范围缩小1/2,这种方法也就是常说的二分法,接下来我们用代码来实现;


    image
    def dichomoty(array, find_num):
        min_index = 0
        max_index = len(array) - 1
        while min_index <= max_index:
            mid = int((min_index + max_index) / 2)
            mid_num = array[mid]
            if mid_num == find_num:
                return mid
            if mid_num > find_num:
                max_index = mid - 1
            else:
                min_index = mid + 1
        return None
    
    array_test = [3,15,19,21,37,56,64,75,80,88,92]
    print(dichomoty(array_test, 21))
    

    输出结果为

    3
    [Finished in 0.8s]
    

    2. 选择排序

    将数组元素按照从小到大的顺序排序,每次从数组中取出最小值,新增到另一个数组。

    def find_small_num(arr):
        small_num = arr[0]
        small_index = 0
        for i in range(len(arr)):
            if small_num > arr[i]:
                small_num = arr[i]
                small_index = i
        return small_index
    
    
    def select_sort(arr):
        new_arr = []
        for _ in range(len(arr)):
            small_index = find_small_num(arr)
            new_arr.append(arr.pop(small_index))
        return new_arr
    
    
    array_test = [3,21,15,92,1,45,33,75,99,88,37]
    select_sort(array_test)
    

    输出结果为

    [1, 3, 15, 21, 33, 37, 45, 75, 88, 92, 99]
    

    相关文章

      网友评论

        本文标题:图解算法

        本文链接:https://www.haomeiwen.com/subject/rmurectx.html