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

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拼接字符串的7种方式详解

    以下是“Python拼接字符串的7种方式详解”的完整攻略。 1. 什么是字符串拼接 字符串拼接是指将多个字符串连接成一个字符串的操作。在Python中,字符串拼接多种方式,可以根据实际需求选择不同的方式。 2. 7种字符串拼接方式 2.1 使用加号(+)拼接字符串 # 使用加号(+)拼接字符串 str1 = "Hello" str2 = …

    python 2023年5月13日
    00
  • Python各种扩展名区别点整理

    Python是一种高级编程语言,常用于数据分析、Web开发和机器学习等领域。在Python中,扩展名指的是文件的扩展名,不同的扩展名代表不同类型的文件和不同的用途。本文将详细讲解Python各种扩展名的区别点,并提供相应示例进行说明。 .py文件 .py文件是Python程序的标准扩展名,用于保存Python源代码。Python源代码是一种文本文件,可以使用…

    python 2023年5月31日
    00
  • Python for Informatics 第11章之正则表达式(二)

    以下是“PythonforInformatics第11章之正则表达式(二)”的完整攻略: 一、问题描述 在PythonforInformatics第11章中,我们学习了正则表达式的基础知识。本文将继续讲解正则表达式的高级用法,包括分组、贪婪匹配、非贪婪匹配等。 二、解决方案 2.1 分组 在正则表达式中,我们可以使用小括号来创建分组。分组可以将多个字符视为一…

    python 2023年5月14日
    00
  • Python 怎么定义计算N的阶乘的函数

    要定义一个计算阶乘的函数,可以使用递归或循环来实现。下面是两个示例函数: 递归实现 def factorial_recursive(n): """ 计算n的阶乘(递归实现) :param n: 一个整数 :return: n的阶乘 """ # 基线情况 if n == 0 or n == 1: re…

    python 2023年6月5日
    00
  • Python海龟turtle基础知识大全以及画图集合实例

    Python海龟turtle基础知识大全以及画图集合实例 一、Python海龟turtle基础知识 1.1 简介 Python中的turtle模块是一种在Python中绘制图形的代码库,可以用于教学和艺术创作。 1.2 turtle基本命令 forward(distance):向前移动指定距离 backward(distance):向后移动指定距离 left…

    python 2023年5月14日
    00
  • Python网络爬虫实例讲解

    Python网络爬虫实例讲解 目录 简介 环境搭建 常用Python爬虫库的介绍 爬虫实例1:爬取网易云音乐评论 爬虫实例2:爬取豆瓣电影TOP250 1. 简介 Python是一门易学易用的编程语言,也是一门广泛应用于数据科学、人工智能等领域的语言。由于其开源、强大的库支持以及优秀的数据处理能力,Python在大数据分析、机器学习、自然语言处理等领域得到了…

    python 2023年5月14日
    00
  • 写一个Python脚本自动爬取Bilibili小视频

    下面是Bilibili小视频自动爬取的攻略: 1. 所需工具 Python编程语言 requests:一个非常流行的Python HTTP客户端库,可用于向远程服务器发送HTTP/1.1请求。 BeautifulSoup:一个用于解析HTML和XML文档的Python库,可用于从网站上抽取所需的数据。 2. 步骤概述 2.1 分析目标网站 在开始编写Pyth…

    python 2023年5月14日
    00
  • Redis 如何实现分布式任务队列?

    以下是 Redis 如何实现分布式任务队列的完整使用攻略。 Redis 分布式任务队列简介 在分布式系统中,为了实现任务的异步处理和解耦,需要使用分布式任务队列Redis 作为一种高能的存储数据库,可以很好地实现分布式任务队列。 Redis 分布式任务队列实现原理利用 Redis 的 List结构,将任务放入队列中,使用 RPOP 命令从队列中取出任务进行处…

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