当前位置: 首页 > article >正文

leetcode 排序算法汇总

快速排序

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[len(arr) // 2]  # 选择中间值作为基准
        left = [x for x in arr if x < pivot]  # 小于基准的放左边
        middle = [x for x in arr if x == pivot]  # 等于基准的放中间
        right = [x for x in arr if x > pivot]  # 大于基准的放右边
        return quicksort(left) + middle + quicksort(right)  # 递归排序

# 测试快速排序算法
arr = [3, 6, 8, 10, 1, 2, 1]
print("原始数组:", arr)
sorted_arr = quicksort(arr)
print("排序后数组:", sorted_arr)
 

冒泡排序

def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1):
        # 标志位用于优化,如果在一轮比较中没有元素交换,说明数组已经有序,可以直接结束排序
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 交换
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        # 如果没有发生交换,说明数组已经有序,退出循环
        if not swapped:
            break
    return arr

# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort(arr)
print("Sorted array is:", sorted_arr)

直接插入排序

def insertion_sort(arr):
    # 遍历从1到len(arr)的所有元素
    for i in range(1, len(arr)):
        key = arr[i]  # 当前要插入的元素
        j = i - 1
        # 将当前元素与已排序部分的元素进行比较,找到合适的插入位置
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]  # 将已排序部分的元素向后移动
            j -= 1
        # 插入当前元素
        arr[j + 1] = key
    return arr

# 示例
if __name__ == "__main__":
    arr = [12, 11, 13, 5, 6]
    print("原始数组:", arr)
    sorted_arr = insertion_sort(arr)
    print("排序后数组:", sorted_arr)
 

二分查找法

def binary_search(arr, target):
    """
    二分查找法
    :param arr: 有序数组
    :param target: 查找目标
    :return: 目标在数组中的索引,如果不存在返回-1
    """
    low = 0
    high = len(arr) - 1

    while low <= high:
        mid = (low + high) // 2
        guess = arr[mid]
        
        if guess == target:
            return mid
        if guess > target:
            high = mid - 1
        else:
            low = mid + 1
    
    return -1

# 示例
if __name__ == "__main__":
    my_list = [1, 3, 5, 7, 9]  # 示例数组
    print(binary_search(my_list, 3))  # 输出:1,因为3在数组中的索引位置是1
    print(binary_search(my_list, -1)) # 输出:-1,因为-1不在数组中
 


http://www.kler.cn/a/408476.html

相关文章:

  • pytorch自定义算子导出onnx
  • python Flask指定IP和端口
  • 【Rhino】【Python】Create a series of Blocks according to Value of object Property
  • Android mk/bp构建工具介绍
  • 【漏洞复现】|智互联SRM智联云采系统quickReceiptDetail SQL注入漏洞
  • 【SKFramework框架】一、框架介绍
  • 对sklearn库中的鸢尾花数据集内容和结构的详解认识和load_iris()函数查找学习举例
  • 瀚海微SD NAND之SD 协议(34)1.8V信号的时序
  • MYSQL-查看存储过程状态和基本信息语法(二十八)
  • docker使用阿里云容器镜像服务下载公共镜像
  • java抽奖系统(二)
  • java 二分查找 方法 详解
  • 一文学会Golang里拼接字符串的6种方式(性能对比)
  • 【jvm】java对象头
  • C指针之舞——指针探秘之旅(2)
  • CentOS 7安装SSHFS 实现远程主机目录 挂载为本地目录
  • 计网-命令行实现收发邮件
  • 【算法】BFS解决最短路径问题
  • Python脚本消费多个Kafka topic
  • WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • Spring Boot OA管理系统:提升企业运营效率
  • 【Stable Diffusion】 超大尺寸绘制、分区控制,详解Tiled Diffusion VAE插件功能
  • 人工智能大趋势下软件开发的未来
  • 【论文复现】BERT模型解读与简单任务实现
  • RabbitMQ3:Java客户端快速入门
  • MariaDB面试题及参考答案