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

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日

相关文章

  • JS实现数组随机排序的三种方法详解

    JS实现数组随机排序的三种方法详解 在JavaScript中,实现数组的随机排序是十分常见的需求。本篇文章将讲解三种实现数组随机排序的方法。 方法一:Fisher-Yates算法 Fisher-Yates算法(也被称为 Knuth算法)是实现数组随机排序最常用的算法之一。该算法的思路很简单,即从数组末尾开始,将当前位置的数与它之前的任意一个数交换顺序,直到数…

    算法与数据结构 2023年5月19日
    00
  • C语言之直接插入排序算法的方法

    C语言直接插入排序算法的方法 什么是直接插入排序 直接插入排序,是一种应用最广泛的排序算法之一,也是一种稳定的排序算法。它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的过程是将待排序的元素插入到已经排好序的元素中,使插入后仍保持有序。 代码实现 下面是用C语言实现直接插入排序算法的代码: void direct_insert…

    算法与数据结构 2023年5月19日
    00
  • JAVA中数组从小到大排序的2种方法实例

    JAVA中数组从小到大排序的2种方法实例 在Java中,对数组进行排序是一项常见的任务。本文将介绍Java中数组从小到大排序的两种方法。 方法一:使用Arrays.sort()方法 Arrays.sort()方法可用于对Java中的数组进行排序。排序之后,数组中的元素将按升序排列。 以下是示例代码: import java.util.Arrays; publ…

    算法与数据结构 2023年5月19日
    00
  • C语言实现九大排序算法的实例代码

    下面我会给您讲解如何实现九大排序算法的实例代码。 1. 排序算法简介 排序算法是计算机科学中重要的算法之一,是将元素按照一定规则进行排列的过程。常见的排序算法包括:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序、计数排序和基数排序。 2. 实现九大排序算法的步骤 以下是九大排序算法的实现步骤: 冒泡排序:依次比较相邻的两个元素,将大的向后…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • php排序算法(冒泡排序,快速排序)

    PHP排序算法是常见的编程问题,其中冒泡排序和快速排序是两种常见的算法。下面我会详细讲解这两种算法的原理和实现方法。 冒泡排序 冒泡排序是一种基本的排序算法,其原理是反复遍历要排序的元素,比较相邻元素的大小,若顺序不对则交换位置,一直重复该过程直到所有元素都按照升序排好。 冒泡排序的实现过程可以分为两个步骤: 外层循环控制排序的趟数,循环次数为 $n-1$ …

    算法与数据结构 2023年5月19日
    00
  • C++STL函数和排序算法的快排以及归并排序详解

    C++ STL函数和排序算法的快排以及归并排序详解 1. 什么是STL? STL(Standard Template Library)是C++标准库中的一部分,它是由若干个模板类和函数构成的集合,提供了一些常用的数据结构和算法。 其中,数据结构包括vector(可变长数组)、list(双向链表)等,算法包括sort(排序)、find(查找)等。 2. STL…

    算法与数据结构 2023年5月19日
    00
  • C语言实现快速排序算法

    C语言实现快速排序算法攻略 什么是快速排序算法 快速排序算法是一种常用的排序算法, 它使用递归的方式不断地将待排序序列分为两个部分,直到每个子序列中只有一个元素,最终合并完成整个序列的排序。 步骤 快速排序算法的步骤如下: 从序列中选取一个基准元素 将所有小于基准元素的元素放到基准元素左边,大于基准元素的元素放到基准元素右边 对基准元素左右两个子序列分别执行…

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