• Python选择排序和冒泡排序算法


    选择排序和冒泡排序都是常见的排序算法。以下是这两种算法的Python实现:

    1. 选择排序(Selection Sort)

    选择排序的基本思想是在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    Python实现如下:

    1. def selection_sort(arr):
    2.     for i in range(len(arr)):
    3.         # 找到当前未排序部分中的最小值
    4.         min_index = i
    5.         for j in range(i+1, len(arr)):
    6.             if arr[j] < arr[min_index]:
    7.                 min_index = j
    8.         # 将找到的最小值与当前i位置的值交换
    9.         arr[i], arr[min_index] = arr[min_index], arr[i]
    10.     return arr
    1. 冒泡排序(Bubble Sort)

    冒泡排序的基本思想是,通过比较相邻的两个元素,如果前一个比后一个大,则交换它们的位置。这样对数组进行多次遍历,每一次遍历都把一个未排序的元素放置到了已排序的末尾,也就是逐渐"冒泡"到正确的位置。

    Python实现如下:

    1. def bubble_sort(arr):
    2.     n = len(arr)
    3.     for i in range(n):
    4.         # 最后i个元素已经有序,无需比较
    5.         for j in range(0, n-i-1):
    6.             if arr[j] > arr[j+1]:
    7.                 arr[j], arr[j+1] = arr[j+1], arr[j]  # 交换位置
    8.     return arr

    这两种算法的时间复杂度都是O(n^2),其中n是列表的长度。这意味着,对于非常大的数据集,这些算法可能不是最高效的。有其他一些更高效的排序算法,例如快速排序、归并排序和堆排序等。

    1. 快速排序(Quick Sort)

    快速排序是一种分治的排序算法。它将一个大的数组分成两个子数组,将两部分独立地排序。快速排序的核心思想是选择一个"基准"元素,通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素要小,然后再按此方法对这两部分继续进行排序,以达到整个序列有序。

    Python实现如下:

    1. def quick_sort(arr):
    2.     if len(arr) <= 1:
    3.         return arr
    4.     pivot = arr[len(arr) // 2]
    5.     left = [x for x in arr if x < pivot]
    6.     middle = [x for x in arr if x == pivot]
    7.     right = [x for x in arr if x > pivot]
    8.     return quick_sort(left) + middle + quick_sort(right)
    1. 归并排序(Merge Sort)

    归并排序是另一种分治的排序算法。它将待排序的序列划分为若干个子序列,每个子序列是一个有序的序列。然后再将所有子序列合并成一个有序的序列。这个过程是递归的,每一层的归并做为一次"归并操作"。

    Python实现如下:

    1. def merge_sort(arr):
    2.     if len(arr) <= 1:
    3.         return arr
    4.     mid = len(arr) // 2
    5.     left = merge_sort(arr[:mid])
    6.     right = merge_sort(arr[mid:])
    7.     return merge(left, right)
    8. def merge(left, right):
    9.     result = []
    10.     i = j = 0
    11.     while i < len(left) and j < len(right):
    12.         if left[i] <= right[j]:
    13.             result.append(left[i])
    14.             i += 1
    15.         else:
    16.             result.append(right[j])
    17.             j += 1
    18.     result += left[i:]
    19.     result += right[j:]
    20.     return result
  • 相关阅读:
    全面预算管理软件
    Redis 列表操作实战(全)
    from表单、css选择器、css组合器、字体样式、背景属性、边框设置、display设置
    【项目经验】:elementui表格中表头的多选框换成文字
    基于JAVA旅游信息网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    docker.6-Dockerfile精讲及新型容器镜像构建技术
    android Studio 文件设置作者信息
    使用 Vert.X Future/Promise 编写异步代码
    【学习笔记】RabbitMQ01:基础概念认识以及快速部署
    AVL树节点插入方式解析(单旋转和双旋转)
  • 原文地址:https://blog.csdn.net/jiazi1024/article/details/134500184