zoukankan      html  css  js  c++  java
  • 算法——简单排序、二分查找及选择排序

    简单排序、二分查找及选择排序

    algorithm 算法

    大O表示法:表达算法的时间复杂性,算最糟糕情况下需要执行的步骤。

    简单查找:按顺序逐个查找,需要查找的次数与列表长度相当,所以简单查找的运行时间被称为线性时间(linear tiem),算法复杂性为O(n)。
    二分查找(binary_search):在一个包含n个元素的序列(sequence)中,最多需要log n(以2为底)步,二分查找的运行时间被称为对数时间或log时间,算法复杂性为O(log n)。
    选择排序(selection_sort):时间复杂性为O(n2),每次找最小值或最大值。

    索引(index):元素的位置
    数组(array):有序的序列,支持随机访问
    链表(linked list):无序,每一个元素都记录了下一个元素的地址,只能顺序访问

    数组 链表
    读取: O(1) O(n)
    插入: O(n) O(1)
    删除: O(n) O(1)

    要点:
    二分查找的速度比简单查找快得多
    O(log n)比O(n)快。需要搜索的元素越多,前者比后者快越多
    数组的读取速度很快
    链表的插入和删除速度很快

    # binary_search 二分查找
    
    
    def simple_search(list, item):
        for i in range(len(list)):
            if list[i] == item:
                return i
    
        return None
    
    
    def binary_search(list, item):
            low = 0
            high = len(list)-1
    
            while low <= high:  # 只要范围没有缩小到只包含一个元素,
                mid = int((low + high)/2)  # 就检查中间的元素
                guess = list[mid]  # 中间值
                if guess == item:  # 找到了
                    return mid  # 返回索引
                if guess > item:  # 大了
                    high = mid - 1
                else:
                    low = mid + 1
    
            return None  # 元素不在列表中
    
    
    if __name__ == '__main__':
        li = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
        print(simple_search(li, 2))
        print(binary_search(li, 2))
        print(simple_search(li, -1))
        print(binary_search(li, -1))
    # selection_sort 选择排序
    
    
    def find_smallest(arr):
        smallest = arr[0]
        smallest_index = 0
        for i in range(1, len(arr)):
            if arr[i] < smallest:
                smallest = arr[i]
                smallest_index = i
        return smallest_index
    
    
    def selection_sort(arr):
        new_arr = []
        for i in range(len(arr)):
            smallest = find_smallest(arr)
            new_arr.append(arr.pop(smallest))  # 找到arr中的最小值,将其弹出并加入newArr
        return new_arr
    
    
    if __name__ == '__main__':
        print(selection_sort([15, 3, 6, 2, 10]))
    Resistance is Futile!
  • 相关阅读:
    SSM中 web.xml配置文件
    实现网站的登陆,注册,查看商品详细信息,加入购物车,注销登陆等简单功能。
    操作步骤
    mysql 查询 练习题及答案
    水仙花数!
    Spark SQL(4)-Unresolved Plan到Analyzed Plan
    Spark SQL(3) Parser到Unresolved LogicPlan
    Spark SQL(2)-InternalRow和TreeNode
    Spark SQL(1)-简述
    logstash output到kafka记录与总结( No entry found for connection 2)
  • 原文地址:https://www.cnblogs.com/noonjuan/p/10922208.html
Copyright © 2011-2022 走看看