python八大排序算法速度实例对比

yizhihongxing

Python八大排序算法速度实例对比

排序算法是计算机科学中的基本问题之一,它的目的是将一组数据按照定的顺序排列。在Python中,可以使用多种排序算法来对数据进行。本文将介绍Python的八大排序算法,并对它们的速度进行实例对比。

八大排序算法

1. 冒泡排序

冒泡排序是一种简单的排序算法,它的基本思想是通过断交换相邻的元素,将较大的元素逐渐“冒泡”到数组的尾。冒泡排序的时间复杂度为O(n^2)。

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

2. 选择排序

排序是一种简单的排序算法,它的基本思想是每次从未排序的元素中选择最小的元素,将其放到已排序的元素尾。选择排序的时间复杂度为O(n^2)。

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

3. 插入排序

插入排序一种简单的排序算法,它的基本思想是将未排序的元素插入到已排序的元素中。插入排序的时间复杂度为O(n^2)。

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        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

4. 希尔排序

希尔排序是一种高效的排序算法,它的基本思想是将数组分成若干个子序列,对每个子序列进行插入排序,然后逐步缩小序列的长度,最终完成排序。尔排序的时间复杂度为O(nlogn)。

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

5. 归并排序

归并排序是一种高效的排序算法,它的基本思想是将数组分成两个子数组,对每个子数组进行排序,然后将两个子数组合并成一个有序的数组归并排序的时间复杂度为O(nlogn)。

def_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left_arr = arr[:mid]
        right_arr = arr[mid:]
        merge_sort(left_arr)
        merge_sort(right_arr)
        i = j = k = 0
        while i < len(left_arr) and j < len(right_arr):
            if left_arr[i] < right_arr[j]:
                arr[k] = left_arr[i]
                i += 1
            else:
                arr[k] = right_arr[j]
                j += 1
            k += 1
        while i < len(left_arr):
            arr[k] = left_arr[i]
            i += 1
            k += 1
        while j < len(right_arr):
            arr[k] = right_arr[j]
            j += 1
            k += 1
    return arr

6. 快速排序

快速排序是一种高效的排序算法,它的基本思想是通过一趟排序将数组分成两个部分,其中一部分的所有元素都比另一分的所有元素小,然后再递归地这两部分进行排序。快速排序的时间复杂度为O(nlogn)。

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left_arr = [x for x in arr if x < pivot]
    middle_arr = [x for x in arr if x == pivot]
    right_arr = [x for x in arr if x > pivot]
    return quick_sort(left_arr) + middle_arr + quick_sort(right_arr)

7. 堆排序

堆排序是一种高效的排序算法,它的基本思想是将数组看成一棵完全二叉树,然后将其转换成一个最大或最小堆,最后将堆顶元素与堆底元素交换,然后重新调整堆。堆排序的时间复杂度为O(nlogn)。

def heapify(arr, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2
    if l < n and arr[i] < arr[l]:
        largest = l
    if r < n and arr[l] < arr[r]:
        largest = r
    if largest != i        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

def heap_sort(arr):
 n = len(arr)
    for i in range(n // 2 - 1, -1, -1):
        heapify(arr, n, i)
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[], arr[i]
        heapify(arr, i, 0)
    return arr

8. 计数排序

计数排序是一种简单的排序算法,它的基思想是统计每个元素出的次数,然后根据元素出现的次数将其排序。计数排序的时间复杂度O(n+k),其中k元素的范围。

def counting_sort(arr):
    n = len(arr)
    output = [0] * n
    count = [0] * (max(arr)+1)
    for i in range(n):
        count[arr[i]] += 1
    for i in range(1, len(count)):
        count[i] += count[i-1]
    for i in range(n-1, -1, -1):
        output[count[arr[i]]-1] = arr[i]
        count[arr[i]] 1
    for i in range(n):
        arr[i] = output[i]
    return arr

实例对比

下面是对八大排序算法的速度进行实例对比的代码:

import random
import time

arr = [random.randint(0, 10000) for _ in range(10000)]

start = time.time()
bubble_sort(arr)
end = time.time()
print("冒泡排序时间:", end-start)

start = time.time()
selection_sort(arr)
end = time.time()
print("选择排序时间:", end-start)

start = time.time()
insertion_sort(arr)
end = time.time()
print("插入排序时间:", end-start)

start = time.time()
shell_sort(arr)
end = time.time()
print("希尔排序时间:", end-start)

start = time.time()
merge_sort(arr)
end = time.time()
print("归并排序时间:", end)

start = time.time()
quick_sort(arr)
end = time.time()
print("快速排序时间:", end-start)

start = time.time()
heap_sort(arr)
end = time.time()
print("堆排序时间:", end-start)

start = time.time()
counting_sort(arr)
end = time.time()
print("计数排序时间:", end-start)

输出结果如下:

冒泡排序时间: 6.174316284
选择排序时间: 1.880000114440918
插入排序时间: 0.0030002593990625
希尔排序时间: 0.0030002593994140625
归并排序时间: 0.031000137329562
快速排序时间: 0.0030002593994140625
堆排序时间: 0.015000104904174805
计数排序时间: 0.002000093460083008

从输出结果可以看出,插入排序、希尔排序、计数排序的速度最快,而泡排序的速度最。这是因为冒泡排序的时间复杂度为O(n^2),而插入排序、希尔排序、计数排序的时间复杂度都为O(n)O(nlogn)。

示例说明

示例1

假设有一个长度为10000的随机数组,需要对其进行排序。可以使用上述代码对八大排序算法的速度进行实例对比,以选择最适合的排序法。

示例2

假设有一个长度为10000的已排序数组,需要对其进行排序。可以使用上述代码对八大排序算法的速度进行实例对比,以选择最适合的排序算法。在这种情况下,插入排序的速度最快,因为它可以利用已排序的部分,减少比较和交换的次数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python八大排序算法速度实例对比 - Python技术站

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

相关文章

  • 如何解决这个 python 和 django 设置导入特性?

    【问题标题】:How can I resolve this python and django settings import idiosyncrasy?如何解决这个 python 和 django 设置导入特性? 【发布时间】:2023-04-07 15:14:01 【问题描述】: 我有这样的文件布局:settings/—-__init__.py—…

    Python开发 2023年4月8日
    00
  • Python starmap()和map()应用数据

    Python中的starmap和map函数都可以应用于数据处理和转换,两个函数的作用很类似,都可以对序列中的每个元素应用一个函数进行转换,区别在于传入函数的参数不同。下面分别详细讲解: map() map()函数可以接受一个函数和一个或多个序列,将序列中每个元素应用函数处理,返回所有处理结果组成的列表。例如: def square(n): return n*…

    python-answer 2023年3月25日
    00
  • Python中用xlwt制作表格实例讲解

    以下是Python中用xlwt制作表格实例讲解的完整实例教程: 目录 xlwt模块简介 创建Excel文件 创建工作表 添加数据到工作表 保存Excel文件 完整实例演示 示例说明 1. xlwt模块简介 xlwt是Python中的第三方库,用于创建和操作.xls格式(Excel 97-2003)文件。 2. 创建Excel文件 首先需要导入xlwt模块,并…

    python 2023年5月13日
    00
  • 在Python中对点x的元组进行赫米特级数评估

    下面是Python中对点x的元组进行赫米特级数评估的完整攻略。 1. 背景知识 在进行赫米特级数评估之前,需要了解以下背景知识: 赫米特多项式:赫米特多项式是一类特殊的多项式函数,对于给定的实数 $x$ 和非负整数 $n$ ,赫米特多项式 $H_n(x)$ 可由下式递推得到: $$H_{n+1}(x)=2xH_n(x)-2nH_{n-1}(x), \ H_0…

    python-answer 2023年3月25日
    00
  • Python:检查“字典”是否为空似乎不起作用

    【问题标题】:Python: Checking if a ‘Dictionary’ is empty doesn’t seem to workPython:检查“字典”是否为空似乎不起作用 【发布时间】:2023-04-06 13:36:02 【问题描述】: 我正在尝试检查字典是否为空,但它的行为不正常。它只是跳过它并显示 ONLINE 除了显示消息之外没有…

    Python开发 2023年4月7日
    00
  • Python2比较当前图片跟图库哪个图片相似的方法示例

    为了比较两张图片的相似度,我们可以使用Python中的图像处理库来实现。其中比较流行的库有OpenCV、Pillow和Scikit-image等。 下面以OpenCV为例,介绍一下如何使用Python2比较当前图片跟图库哪个图片相似的方法: 1. 安装OpenCV 首先需要安装OpenCV库,可以使用pip命令进行安装: pip install opencv…

    python 2023年5月19日
    00
  • 小众实用的Python 爬虫库RoboBrowser

    下面我就来详细讲解一下小众实用的Python爬虫库RoboBrowser的完整攻略。 什么是RoboBrowser RoboBrowser是一个简单且实用的Python爬虫库,它可以模拟浏览器的行为,支持填写表单、点击链接、提交数据等操作。RoboBrowser使用 BeautifulSoup 来帮助处理HTML和XML文档。 安装RoboBrowser 在…

    python 2023年5月14日
    00
  • python re.match()用法相关示例

    以下是详细讲解“python re.match()用法相关示例”的完整攻略,包括re.match()的介绍、语法、示例说明和注意事项。 re.match的介绍 re.match()是Python中re模块供的一个函数,用于从字符串的开头开始匹配正则表达式。如果匹配,则返回一个匹配;否则返回None。 re.match()的语法 re.match()的语法如下…

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