无名商城论坛

搜索
查看: 382|回复: 0

[其他技术] 【HC】基础算法代码

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 18:39:40 | 显示全部楼层 |阅读模式

快速排序:def quick_sort(lst):    if not lst:        return []    pivot = lst[0]    left = quick_sort([x for x in lst[1: ] if x < pivot])    right = quick_sort([x for x in lst[1: ] if x >= pivot])    return left + [pivot] + right1234567归并排序:def merge_sort(lst):    if len(lst) <= 1:        return lst    mid = len(lst) // 2    left = merge_sort(lst[: mid])    right = merge_sort(lst[mid:])    return merge(left, right)    def merge(left, right):    l, r, res = 0, 0, []    while l < len(left) and r < len(right):        if left[l] <= right[r]:            res.append(left[l])            l += 1        else:            res.append(right[r])            r += 1    res += left[l:]    res += right[r:]    return res1234567891011121314151617181920堆排序:def siftup(lst, temp, begin, end):    if lst == []:        return []    i, j = begin, begin * 2 + 1    while j < end:        if j + 1 < end and lst[j + 1] > lst[j]:            j += 1        elif temp > lst[j]:            break        else:            lst = lst[j]            i, j = j, 2 * j + 1    lst = temp    def heap_sort(lst):    if lst == []:        return []    end = len(lst)    for i in range((end // 2) - 1, -1, -1):        siftup(lst, lst, i, end)    for i in range(end - 1, 0, -1):        temp = lst        lst = lst[0]        siftup(lst, temp, 0, i)    return lst12345678910111213141516171819202122232425二分查找:# 一般二分查找def binsearch(lst, x):    start, end = 0, len(lst)-1    while start<= end:        mid = (start+ end) // 2        if lst[mid] > x:            end = mid - 1        elif lst[mid] < x:            start = mid + 1        else:            return True    return False# 二分查找第一次出现indexdef binsearch_get_lower(lst, x):        start, end = 0, len(lst)-1        mid = (start+end) // 2        while start <= end:                if lst[mid] < x:                        start = mid + 1                else:                        end = mid - 1                mid = (start+end) // 2        return start
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表