python 常见排序算法

python 常见排序算法

冒泡排序

def maopao_sort(list1: list):
    """
    冒泡排序
    复杂度O(N^2)
    :param list1: 每次对相邻两个数进行排
    :return:
    """
    n = len(list1)
    if n < 2:
        return list1
    for i in range(n):
        for j in range(i + 1, n):
            if list1[i] > list1[j]:
                list1[i], list1[j] = list1[j], list1[i]
    return list1

选择排序

def xuanze_sort(list1: list):
    """
    选择排序:每次选择最小的往前排
    复杂度O(N^2)
    :param list1:
    :return:
    """
    n = len(list1)
    if n < 2:
        return list1
    for i in range(n):
        min_index = i
        for j in range(i + 1, n):
            min_index = j if list1[min_index] > list1[j] else min_index
        list1[i], list1[min_index] = list1[min_index], list1[i]
    return list1

插入排序

def charu_sort(list1:list):
    """
    插入排序   前n个数已经排好了,将第n+1个数排进前n个已排好的数中
    复杂度和数据状况有关最差情况:复杂度O(N^2)
    :param list1:
    :return:
    """
    n = len(list1)
    for i in range(1, n):
        value = list1[i]
        j = i-1
        while j >= 0 and value < list1[j]:
            list1[j+1] = list1[j]
            j -= 1
        list1[j+1] = value

    return list1

归并排序

def merge_sort(alist):
    if len(alist) < 2:
        return alist

    num = len(alist) >> 1
    l = merge_sort(alist[:num])
    r = merge_sort(alist[num:])

    return merge(l, r)


def merge(left, right):
    l, r = 0, 0
    result = []
    while l < len(left) and r < len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1

    result += left[l:]
    result += right[r:]

    return result

快速排序

def kuaisu_sort(arr):
    if len(arr) <= 1:
        return arr
    kuaisu_sort_help(arr, 0, len(arr) - 1)


def kuaisu_sort_help( arr, l, r):
    if l < r:
        less, more = partition(arr, l, r)
        kuaisu_sort_help(arr, l, less - 1)
        kuaisu_sort_help(arr, more + 1, r)


def partition( arr, l, r):
    less = l - 1
    more = r
    index = l
    while index < more:
        if arr[index] < arr[r]:
            less += 1
            swap(arr, index, less)
            index += 1
        elif arr[index] > arr[r]:
            more -= 1
            swap(arr, index, more)
        else:
            index += 1
    swap(arr, more, r)
    return less + 1, more

def swap( arr, i, j):
    arr[i], arr[j] = arr[j], arr[i]

if __name__ == '__main__':
    arr = [1, 2, 89, 10,3, 4, 3, 3, 3, 1]
    kuaisu_sort(arr)
    print(arr)

堆排序

def heap_sort( arr):
    heapsize = len(arr)
    if heapsize <= 1: return arr
    for index in range(heapsize):
        heap_insert(arr, index)
    heapsize -= 1
    swap(arr, 0, heapsize)
    while heapsize > 1:
        heapify(arr, 0, heapsize)
        heapsize -= 1
        swap(arr, 0, heapsize)


def heap_insert( arr, index):
    """
    构建一个大根堆
    :param arr:
    :param index:
    :return:
    """
    root_index = (index - 1) >> 1
    while index > 0 and arr[index] > arr[root_index]:
        swap(arr, index, root_index)
        index = root_index
        root_index = (index - 1) >> 1


def heapify( arr, index, heapsize):
    left = (index << 1) + 1
    while left < heapsize:
        big = left + 1 if left + 1 < heapsize and arr[left + 1] > arr[left] else left
        big = big if arr[big] > arr[index] else index
        if big == index:
            break
        swap(arr, index, big)
        index = big
        left = (index << 1) + 1

def swap( arr, i, j):
    arr[i], arr[j] = arr[j], arr[i]

if __name__ == '__main__':
    arr = [1, 2, 89, 10,3, 4, 3, 3, 3, 1]
    heap_sort(arr)

    print(arr)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值