Python算法

https://visualgo.net/zh

查找算法

顺序查找

无序表查找

# alist:无序列表   target:要找的数据项
import random


def sequentialSearch(alist, target):
    # 索引位置
    pos = 0
    # 是否找到
    found = False
    # 循环条件为:索引值小于列表的长度和为 true;当found为false时,则会退出
    while pos < len(alist) and not found:
        # 如果找到目标值,将found设置为True,再次循环时,就会退出
        if alist[pos] == target:
            found = True
        else:
            # 索引值加1
            pos += 1
    return found


# 生成一个无序列表
lists = [random.randint(1, 50) for i in range(random.randint(1, 50))]
print(lists)
print(sequentialSearch(lists, 12))
print(sequentialSearch(lists, 49))

有序表查找

def orderedSequentialSearch(alist, target):
    # 索引位置
    index = 0
    # 设置是否找到
    found = False
    # 当前值是否大于目标值
    stop = False
    # 循环条件为:索引值小于列表长度,并且 当found为 True和 stop为 True时退出循环
    while index < len(alist) and not found and not stop:
        if target == alist[index]:
            # 当 found为True,则会退出
            found = True
        else:
            # 判断当前输入是否大于目标值
            if alist[index] > target:
                # 当 stop为True,则会退出
                stop = True
            else:
                index += 1
    return found


# 定义一个有序列表
lists = [1, 9, 13, 46, 89, 126, 456, 792, 965]
print(orderedSequentialSearch(lists, 23))  # False
print(orderedSequentialSearch(lists, 126))  # True

二分查找

二分查找: 分而治之

# 二分查找: 分而治之
def binarySearch(alist, target):
    # 第一个元素的位置
    first = 0
    # 最后一个元素的位置
    last = len(alist) - 1
    # 设置是否找到
    found = False
    # 循环条件为:first <= last 并且没有找到
    while first <= last and not found:
        #  取中间值
        midpoint = (first + last) // 2
        # 如果列表的中间值为目标值,则表示找到目标值
        if alist[midpoint] == target:
            found = True
        else:
            # 如果目标值小于列表中的中间值,则表示目标值在后半截
            if target < alist[midpoint]:
                # 最后一个元素位置则缩短为中间值-1的位置
                last = midpoint - 1
            # 否则表示目标值在前半截
            else:
                # 第一个元素的位置为中间值+1
                first = midpoint + 1
    return found


# 定义一个有序列表
lists = [1, 20, 35, 45, 58, 87, 94, 144, 214, 448]
print(binarySearch(lists, 45))  # True
print(binarySearch(lists, 23))  # False

排序算法

冒泡排序

import random


def bubbleSort(alist):
    # 遍历传入的列表,遍历 n-1 趟
    for passNum in range(len(alist) - 1, 0, -1):
        # 在每一趟中对比前一项是否大于后一项
        for i in range(passNum):
            # 如果前一项大于大于后一项
            if alist[i] > alist[i + 1]:
                # 交换他们的位置
                alist[i], alist[i + 1] = alist[i + 1], alist[i]


# 定义列表
lists = [28,20, 6,  42, 19, 49, 37]
bubbleSort(lists)
print(lists)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值