那些简单的算法总结

博客主页:楼下安同学的博客

本文由 楼下安同学 原创

欢迎点赞 收藏 ⭐留言 如有错误敬请指正!

生活明朗,万物可爱,人间值得,未来可期!✨

----❤️-----❤️-----❤️-----❤️-----❤️-----❤️-----❤️-----

概述

  算法是程序员的灵魂,一般分为查找算法排序算法,下面是最简单的一些算法总结,欢迎学习!

查找算法

Ⅰ、顺序查找

  顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。该算法的时间复杂度为O(n)

def sequential_search(lst, key):
    """
    顺序查找
    返回元素位置 0则为元素不存在
    """
    for i in range(len(lst)):
        if lst[i] == key:
            return i
    else:
        return None
Ⅱ、二分查找

  二分查找(Binary Search),是一种在有序数组中查找某一特定元素的查找算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

def binary_search(lst, key):
    """
    二分查找
    有序 Array
    """
    low = 0
    high = len(lst) - 1
    while low <= high:
        mid = int((low + high) / 2)
        if key < lst[mid]:
            high = mid - 1
        elif key > lst[mid]:
            low = mid + 1
        else:
            return mid
    return None

排序算法

Ⅰ、冒泡排序

  冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

def bubble_sort(lst):
    """
    冒泡排序
    """
    for i in range(len(lst) - 1):  # 遍历 len(lst)-1 次
        for j in range(len(lst) - i - 1):  # 已排好序的部分不用再次遍历
            if lst[j] > lst[j + 1]:
                lst[j], lst[j + 1] = lst[j + 1], lst[j]  # Python 交换两个数不用中间变量
    return lst


# 递归写法
def bubble_sort(lst):
    """
    冒泡排序
    """
    flag = 0
    for i in range(len(lst) - 1):
        if lst[i] < lst[i + 1]:
            lst[i], lst[i + 1] = lst[i + 1], lst[i]
            flag = 1
    if flag:
        return bubble_sort(lst)
    else:
        return lst
Ⅱ、快排

  快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

def quick_sort(lst):
    """
    快速排序 nlogn
    平均空间复杂度为 O(nlogn)
    """
    if len(lst) <= 1:
        return lst
    pivot = lst[0]  # 基准值
    left = [lst[i] for i in range(1, len(lst)) if lst[i] < pivot]
    right = [lst[i] for i in range(1, len(lst)) if lst[i] >= pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)
Ⅲ、插入排序

  插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

def insertion_sort(lst):
    """
    插入排序
    """
    for i in range(len(lst) - 1):  # 遍历 len(nums)-1 次
        cur_num, pre_index = lst[i + 1], i  # curNum 保存当前待插入的数
        while pre_index >= 0 and cur_num < lst[pre_index]:  # 将比 curNum 大的元素向后移动
            lst[pre_index + 1] = lst[pre_index]
            pre_index -= 1
        lst[pre_index + 1] = cur_num  # 待插入的数的正确位置
    return lst
Ⅳ、选择排序

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理大致是将后面的元素最小元素一个个取出然后按顺序放置。

def selection_sort(lst):
    """ 
    选择排序
    """
    for i in range(len(lst) - 1):  # 遍历 len(lst)-1 次
        min_index = i
        for j in range(i + 1, len(lst)):
            if lst[j] < lst[min_index]:  # 更新最小值索引
                min_index = j
        lst[i], lst[min_index] = lst[min_index], lst[i]  # 把最小数交换到前面
    return lst

那些简单的算法总结_第1张图片

你可能感兴趣的:(python,算法,排序算法,数据结构)