python数据结构的排序算法

Python数据结构的排序算法

排序是计算机科学中最基本的问题之一,它可以用于在程序中存储和管理数据。Python中有多种排序算法,包冒泡排序、选择排序、插入排序、归并排序、快速排序等。本文将详细介绍这些排序算法的用法和示。

冒泡排序

冒泡排序是一种简单的排序算法,它通过比较相邻的元素并交换它们来排序。冒排序的时间复杂度为$O(n^2)$。以下一个使用冒泡排序对列表进行排序的示例:

# 使用冒泡排序对列表进行排序
def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(0, n-i-1):
            if lst] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]

lst = [3, 1, 4, 1, 5, 9, , 6, 5,3, 5]
bubble_sort(lst)
print(lst)

输出结果为:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例中,我们使用冒泡排序算法对lst进行排序。我们使用两个嵌套的循环来比较相邻的元素并交换它们,直到整个列表都被。

选择排序

选择排序是一种简单的排序算法,它通过选择最小的元素并将其放在正确的位置来排序。选择排序的时间复杂度为$O(n^2)$。以下是一个使用选择排序对列表进行排序的示例:

# 使用选择排序对列表进行排序
def selection_sort(lst):
    n = len(lst)
    for i in range(n):
        min_idx = i
        for j in range(i+1, n):
            if lst[j] < lst[min_idx]:
                min_idx = j
        lst[i], lst[min_idx] = lst[min_idx], lst[i]

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
selection_sort(lst)
print(lst)

输出结果为:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例中,我们使用选择排序算法对列表lst进行排序。我们使用两个嵌套的循环来选择最小的元素并将其放在正确的位置,直到整个列表都被排序。

插入排序

插入排序是一种简单的排序,它通过将元素插入到已排序的部分中来排序。插入排序的时间复杂度为$O(n^2)$。以下是一个使用插入排序对列表进行排序的示例:

# 使用插入排序对列表进行排序
def insertion_sort(lst):
    n = len(lst)
    for i in range(1, n):
        key = lst[i]
        j = i - 1
        while j >=0 and key < lst[j]:
            lst[j+1] = lst[j]
            j -= 1
        lst[j+1] = key

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
insertion_sort(lst)
print(lst)

输出结果为:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例中,我们使用插入排序算法对列表lst进行排序。我们使用一个循环来将元素插入到已排序的部分中,直到整个列表都被排序。

归并排序

归并排序是一种分治算法,它将列表分成两个子列表,对每个子列表进行排序,然后将它们合并成一个有序的列表。归并排序的时间复杂度为$O(n\log n)$以下是一个使用归并排序对列表进行排序的示例:

# 使用归并排序对列表进行排序
def merge_sort(lst):
    if len(lst) > 1:
        mid = len(lst) // 2
        left_lst = lst[:mid]
        right_lst = lst[mid:]
        merge_sort(left_lst)
        merge_sort(right_lst)
        i = j = k = 0
        while i < len(left_lst) and j < len(right_lst):
            if left_lst[i] < right_lst[j]:
                lst[k] = left_lst[i]
                i += 1
            else:
                lst[k] = right_lst[j]
                j += 1
            k += 1
        while i < len(left_lst):
            lst[k] = left_lst[i]
            i += 1
            k += 1
        while j < len(right_lst):
            lst[k] = right_lst[j]
            j += 1
            k += 1

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
merge_sort(lst)
print(lst)

输出结果为:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例中,我们使用归并排序算法对列表lst进行排序。我们使用递归将列表分成两个子列表,对每个子列表进行排序,然后将它们合并成一个有序的列表。

快速排序

快速排序是一种分治算法,它通过选择一个基准元素,将列表分成两个子列表,对每个子列表进行排序,然后将它们合并成一个有序的列表。快速排序的时间复杂度为$O(n\log n。以下是一个使用快速排序对列表进行排序的示例:

# 使用快速排序对列表进行排序
def quick_sort(lst):
    if len(lst) <= 1:
        return lst
    pivot = lst[0]
    left_lst = [x for x in lst[1:] if x < pivot]
    right_lst = [x for x in lst[1:] if x >= pivot]
    return quick_sort(left_lst) + [pivot] + quick_sort(right_lst)

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
lst = quick_sort(lst)
print(lst)

输出结果为:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例中,我们使用快速排序算法对列表lst进行排序。我们选择一个基准元素,将列表分成两个子列表,对每个子列表进行排序,然后将它们合并成一个有的列表。

总结

Python中有多种排序算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。每种排序算法都有其自己的优缺点和适景。本文介绍了这些排序算法的用法和示例,希望能够帮助您更好地理解Python中的排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据结构的排序算法 - Python技术站

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

相关文章

  • 基于javascript canvas实现五子棋游戏

    首先,基于javascript canvas实现五子棋游戏,需要掌握以下几个要点: Canvas基础知识 五子棋基本规则 JavaScript语言 以下是实现五子棋游戏的具体步骤: 步骤一:设置页面布局 首先定义一个画布<canvas>元素,用于绘制五子棋棋盘。设置宽度和高度为900像素,如下所示: <canvas id="che…

    python 2023年6月3日
    00
  • Python 中导入csv数据的三种方法

    下面是“Python 中导入csv数据的三种方法”的完整攻略。 方法一:使用Python内置的csv模块 首先,我们需要导入Python内置的csv模块,然后使用 csv.reader() 方法,将csv数据读取为列表形式。 示例代码如下: import csv with open(‘data.csv’, ‘r’) as file: reader = csv…

    python 2023年6月3日
    00
  • python中如何进行连乘计算

    要在Python中进行连乘计算,可以使用for循环来实现。这里我们将使用两条示例来说明。 示例一 步骤1:指定要连乘的列表 首先,我们需要指定要进行连乘计算的数字列表。这里,我们创建一个包含整数1到5的列表。 nums = [1, 2, 3, 4, 5] 步骤2:通过for循环计算连乘积 接下来,我们可以使用一个for循环来计算这个列表中所有数字的连乘积。这…

    python 2023年5月18日
    00
  • python 阶乘累加和的实例

    Python 阶乘累加和的实例攻略 问题背景 阶乘是数学中的一种特殊运算,常用于离散数学、组合数学等领域。对于一个正整数 n,其阶乘的定义为: n! = n x (n-1) x (n-2) x … x 1 例如: 3! = 3 x 2 x 1 = 6 5! = 5 x 4 x 3 x 2 x 1 = 120 现在的问题是,如何计算从 1 到 n 的所有正…

    python 2023年6月5日
    00
  • Python可视化单词统计词频统计中文分词的实现步骤

    以下是Python可视化单词统计词频统计中文分词的实现步骤的完整攻略。 简介 在进行单词统计词频统计中文分词之前,我们需要先了解以下概念: 单词:文本中由空格或标点符号隔开的一组字符。 词频:文本中某个单词出现的次数。 中文分词:将中文文本按照一定的规则分成一个一个词语。 在Python中,我们可以使用一些库来实现上述操作,例如: re:用于正则表达式的处理…

    python 2023年5月13日
    00
  • Python将string转换到float的实例方法

    下面是详细讲解“Python将string转换到float的实例方法”的完整攻略。 什么是Python中的字符串和浮点数? 在Python中,字符串指的是用单引号或双引号括起来的字符序列,例如: a_string = ‘hello world’ 而浮点数则是用来表示有小数部分的实数,例如: a_float = 3.14 字符串如何转换成浮点数? 要将一个字符…

    python 2023年6月5日
    00
  • UnicodeError: URL 包含非 ASCII 字符 (Python 2.7)

    【问题标题】:UnicodeError: URL contains non-ASCII characters (Python 2.7)UnicodeError: URL 包含非 ASCII 字符 (Python 2.7) 【发布时间】:2023-04-07 19:39:01 【问题描述】: 所以我设法制作了一个爬虫,我正在搜索所有链接,当我到达产品链接时,我…

    Python开发 2023年4月8日
    00
  • Python全面解析json数据并保存为csv文件

    以下是详细讲解“Python全面解析json数据并保存为csv文件”的完整攻略。 准备工作 在开始之前,我们需要安装一些必要的工具,包括requests和pandas。在终端中输入以下命令进行安装: pip install requests pandas 其中,requests模块可以帮助我们获取json数据,pandas模块可以帮助我们将数据保存到csv文…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部