Python 数据结构之十大经典排序算法一文通关

yizhihongxing

Python 数据结构之十大经典排序算法一文通关

一、前置知识

在学习本文之前,需要具备以下基础知识:

二、十大经典排序算法

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 希尔排序
  5. 归并排序
  6. 快速排序
  7. 堆排序
  8. 计数排序
  9. 桶排序
  10. 基数排序

本文将一一讲解这十种排序算法。

三、冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历过要排序的数列,一次比较两个元素,如果顺序有误就交换位置。它的实现过程如下:

def bubble_sort(data):
    for i in range(len(data)):
        for j in range(len(data)-1-i):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],冒泡排序算法的输出结果为 [1, 2, 3, 4, 5]。

四、 选择排序

选择排序是一种简单直观的排序算法。它的实现过程如下:

def selection_sort(data):
    for i in range(len(data)):
        min_index = i
        for j in range(i+1, len(data)):
            if data[j] < data[min_index]:
                min_index = j
        data[i], data[min_index] = data[min_index], data[i]
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],选择排序算法的输出结果为 [1, 2, 3, 4, 5]。

五、插入排序

插入排序是一种简单直观的排序算法,它的实现过程如下:

def insertion_sort(data):
    for i in range(1, len(data)):
        key = data[i]
        j = i - 1
        while j >= 0 and data[j] > key:
            data[j+1] = data[j]
            j -= 1
        data[j+1] = key
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],插入排序算法的输出结果为 [1, 2, 3, 4, 5]。

六、希尔排序

希尔排序是一种改进的插入排序算法,它的实现过程如下:

def shell_sort(data):
    gap = len(data) // 2
    while gap > 0:
        for i in range(gap, len(data)):
            temp = data[i]
            j = i
            while j >= gap and data[j-gap] > temp:
                data[j] = data[j-gap]
                j -= gap
            data[j] = temp
        gap //= 2
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],希尔排序算法的输出结果为 [1, 2, 3, 4, 5]。

七、归并排序

归并排序是一种分治思想的算法,它的实现过程如下:

def merge_sort(data):
    if len(data) <= 1:
        return data
    mid = len(data) // 2
    left = merge_sort(data[:mid])
    right = merge_sort(data[mid:])
    return merge(left, right)

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

例如,对于输入列表 [3, 1, 2, 5, 4],归并排序算法的输出结果为 [1, 2, 3, 4, 5]。

八、快速排序

快速排序是一种分治思想的算法,它的实现过程如下:

def quick_sort(data):
    if len(data) <= 1:
        return data
    pivot = data[0]
    left = [x for x in data[1:] if x <= pivot]
    right = [x for x in data[1:] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)

例如,对于输入列表 [3, 1, 2, 5, 4],快速排序算法的输出结果为 [1, 2, 3, 4, 5]。

九、堆排序

堆排序是一种树形选择排序。它的实现过程如下:

def heap_sort(data):
    def sift_down(start, end):
        root = start
        while True:
            child = 2 * root + 1
            if child > end:
                break
            if child + 1 <= end and data[child] < data[child+1]:
                child += 1
            if data[root] < data[child]:
                data[root], data[child] = data[child], data[root]
                root = child
            else:
                break

    for start in range((len(data)-2)//2, -1, -1):
        sift_down(start, len(data)-1)

    for end in range(len(data)-1, 0, -1):
        data[0], data[end] = data[end], data[0]
        sift_down(0, end-1)
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],堆排序算法的输出结果为 [1, 2, 3, 4, 5]。

十、计数排序

计数排序是一种线性时间复杂度的排序算法,它的实现过程如下:

def counting_sort(data):
    bucket = [0] * (max(data)+1)
    for i in data:
        bucket[i] += 1
    index = 0
    for i in range(len(bucket)):
        while bucket[i] > 0:
            data[index] = i
            index += 1
            bucket[i] -= 1
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],计数排序算法的输出结果为 [1, 2, 3, 4, 5]。

十一、桶排序

桶排序是一种线性时间复杂度的排序算法,它的实现过程如下:

def bucket_sort(data):
    max_num = max(data)
    min_num = min(data)
    bucket_size = 5
    bucket_count = (max_num - min_num) // bucket_size + 1
    buckets = [[] for _ in range(bucket_count)]
    for i in data:
        buckets[(i-min_num)//bucket_size].append(i)
    result = []
    for b in buckets:
        if b:
            result.extend(sorted(b))
    return result

例如,对于输入列表 [3, 1, 2, 5, 4],桶排序算法的输出结果为 [1, 2, 3, 4, 5]。

十二、基数排序

基数排序是一种多关键字排序算法,它的实现过程如下:

def radix_sort(data):
    max_num = max(data)
    max_digits = len(str(max_num))
    mod = 10
    dev = 1
    for i in range(max_digits):
        buckets = [[] for _ in range(mod*2)]
        for j in data:
            bucket_index = j // dev % mod + mod
            buckets[bucket_index].append(j)
        dev *= 10
        data = [x for b in buckets for x in b]
    return data

例如,对于输入列表 [3, 1, 2, 5, 4],基数排序算法的输出结果为 [1, 2, 3, 4, 5]。

结语

以上就是十大经典排序算法的实现过程。需要注意的是,不同的排序算法在不同场景下可能会有不同的表现。掌握不同的排序算法,能够帮助我们更好地解决实际问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 数据结构之十大经典排序算法一文通关 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C语言 实现归并排序算法

    C语言实现归并排序算法的攻略如下: 展示归并排序算法思路 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。 然后对每个子序列进行排序,合并成新的有序序列。 重复第二步,直到只剩下一个排序完毕的序列。 C语言代码实现 下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码: #include <stdio.…

    算法与数据结构 2023年5月19日
    00
  • C++实现希尔排序(ShellSort)

    下面是关于C++实现希尔排序(ShellSort)的攻略。 什么是希尔排序? 希尔排序是插入排序的一种改进版本,与普通插入排序不同的是,它会先将数组按一定间隔 gap 分成若干个小组进行插入排序,然后缩小间隔再分组排序,直到最后 gap 为 1,此时整个序列就是有序的。希尔排序的本质就是分组的插入排序。 希尔排序的代码实现 下面针对希尔排序的核心代码进行讲解…

    算法与数据结构 2023年5月19日
    00
  • JS实现的冒泡排序,快速排序,插入排序算法示例

    为了给大家更好的理解,这里先介绍一下这三种排序算法的基本思想: 冒泡排序:依次比较相邻两个元素的大小,将较大的元素往后移动,每一轮比较都可以确定一个最大的元素,因此需要进行N-1轮。 快速排序:选定一个中心点,将小于这个中心点的元素排在左边,大于这个中心点的元素排在右边,然后分别对左右两边的元素重复这个操作。 插入排序:将数组按升序排列,一次将每个元素插入到…

    算法与数据结构 2023年5月19日
    00
  • C++中字符串全排列算法及next_permutation原理详解

    C++中字符串全排列算法及next_permutation原理详解 介绍 全排列是指将一组数按一定顺序进行排列,得到所有有可能的组合。例如,对于数字1、2、3,全排列如下: 123132213231312321 C++中有现成的函数next_permutation可以实现全排列,但理解其原理仍然很重要,本篇文章将详细讲解next_permutation的原理…

    算法与数据结构 2023年5月19日
    00
  • 逐步讲解快速排序算法及C#版的实现示例

    逐步讲解快速排序算法及C#版的实现示例 1. 快速排序算法简介 快速排序算法是一种高效的排序算法,它的时间复杂度为 $O(nlogn)$。它的基本思想是通过一次划分将原问题分解为两个子问题,再对子问题进行递归解决,最终得到排序结果。 2. 快速排序算法核心思想 快速排序算法的核心思想是选取一个基准元素,将待排序的序列分成两部分,一部分比基准元素小,一部分比基…

    算法与数据结构 2023年5月19日
    00
  • TypeScript十大排序算法插入排序实现示例详解

    针对“TypeScript十大排序算法插入排序实现示例详解”的完整攻略,我有如下的描述和示例: 1. 算法简介 插入排序(Insertion Sort)是一种简单直观的排序算法。它的基本思想是将目标数组分为已排序和未排序区间,每次从未排序区间中选取一个元素并插入到已排序区间中正确的位置。 插入排序是一种相对基础的排序算法,不仅实现起来比较简单,而且时间复杂度…

    算法与数据结构 2023年5月19日
    00
  • C/C++语言八大排序算法之桶排序全过程示例详解

    C/C++语言八大排序算法之桶排序全过程示例详解 什么是桶排序 桶排序(Bucket Sort)是一种线性排序算法,它的基本思想是将数组内的元素根据某个规则分配到若干个桶中,然后对每个桶内的元素进行排序,最终合并每个桶内的有序元素即可得到原数组的有序结果。 桶排序的主要应用场景是待排序元素的分布比较均匀的情况下,性能表现优于其他排序算法(例如快速排序、归并排…

    算法与数据结构 2023年5月19日
    00
  • 基于python进行桶排序与基数排序的总结

    基于python进行桶排序与基数排序的总结 桶排序 桶排序是一种稳定的排序算法,利用预先定义的桶按照一定的映射关系将待排序的元素分配到不同的桶中,并对每个桶中的元素进行排序,最后将所有桶中的结果合并起来即可。 具体的步骤如下: 找出待排序数组中的最大值max和最小值min,确定所需桶的数量,建立一个包含顺序桶的桶(列表)bucket和一个空列表result。…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部