使用Python实现七大排序算法的代码实例

 更新时间:2023年07月29日 10:14:46   作者:次时代小羊  
这篇文章主要介绍了使用Python实现七大排序算法的代码实例,所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,需要的朋友可以参考下

Python实现七种常见的排序算法

import random, time
# 生成随机数组
def generate_random_array(size, lrange, rrange):
    return [random.randint(lrange, rrange) for i in range(size)]
# 判断数组是否顺序有序
def is_order_asc(arr):
    for i in range(len(arr) - 1):
        if arr[i] > arr[i + 1]:
            return False
    return True
# 排序算法装饰器
def sort(name):
    def decoration(sort_func):
        def wrapper(*dargs, **dkw):
            start_time = time.time()
            sort_func(*dargs, **dkw)
            if is_order_asc(*dargs):
                print(name + ':数组排序所需时间为:' + str((time.time() - start_time) * 1000) + '毫秒')
            else:
                print(name + ':数组排序失败')
        return wrapper
    return decoration
@sort('冒泡排序')
def bubble_sort(arr):
    length = len(arr)
    for i in range(length - 1):
        for j in range(length - 1):
            if arr[j + 1] < arr[j]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
@sort('选择排序')
def select_sort(arr):
    for i in range(len(arr) - 1):
        min = i
        for j in range(i + 1,len(arr)):
            if arr[j] < arr[min]:
                min = j
        arr[min], arr[i] = arr[i], arr[min]
@sort('插入排序')
def insert_sort(arr):
    for i in range(1, len(arr)):
        insert_value = arr[i]
        for j in range(i, -1, -1):
            if arr[j - 1] <= insert_value:
                break
            arr[j] = arr[j - 1]
        arr[j] = insert_value
@sort('希尔排序')
def shell_sort(arr):
    h = 1
    while h * 3 + 1 < len(arr):
        h = h * 3 + 1
    while h > 0:
        for i in range(h, len(arr)):
            insert_value = arr[i]
            for j in range(i, -1, -h):
                if (arr[j - h] <= insert_value):
                    break
                arr[j] = arr[j - h]
            arr[j] = insert_value
        h = int((h - 1) / 3)
@sort('统计排序')
def count_sort(arr):
    min_value = arr[0]
    max_value = arr[0]
    for i in range(1, len(arr)):
        if arr[i] > max_value:
            max_value = arr[i]
        elif arr[i] < min_value:
            min_value = arr[i]
        else:
            pass
    count = [0 for i in range(max_value - min_value + 1)]
    for i in arr:
        count[i - min_value] += 1
    index = 0
    for i in range(len(count)):
        for j in range(count[i]):
            arr[index] = i + min_value
            index += 1
@sort('快速排序')
def quick_sort(arr):
    quick(arr, 0, len(arr) - 1)
def quick(arr, start, end):
    if start >= end:
        return
    pivot_index = partition(arr, start, end)
    quick(arr, start, pivot_index - 1)
    quick(arr, pivot_index + 1, end)
def partition(arr, start, end):
    pivot = arr[start]
    mark = start
    for i in range(start + 1, end + 1):
        if arr[i] <= pivot:
            mark += 1
            arr[i], arr[mark] = arr[mark], arr[i]
    arr[start], arr[mark] = arr[mark], arr[start]
    return mark
@sort('归并排序')
def merge_sort(arr):
    merge_sort2(arr, 0, len(arr) - 1)
def merge_sort2(arr, start, end):
    if start >= end:
        return
    middle = int((end - start) / 2) + start
    merge_sort2(arr, start, middle)
    merge_sort2(arr, middle + 1, end)
    merge(arr, start, middle, end)
def merge(arr, start, middle, end):
    copy = [arr[i] for i in range(start, end + 1)]
    left = start
    right = middle + 1
    index = start
    while left <= middle and right <= end:
        if copy[left - start] <= copy[right - start]:
            arr[index] = copy[left - start]
            left+=1
        else:
            arr[index] = copy[right - start]
            right+=1
        index+=1
    while left <= middle:
        arr[index] = copy[left - start]
        left+=1
        index+=1
    while right <= end:
        arr[index] = copy[right - start]
        right+=1
        index+=1
if __name__ == '__main__':
    bubble_sort(generate_random_array(10000, 0, 1000000))
    select_sort(generate_random_array(10000, 0, 1000000))
    insert_sort(generate_random_array(10000, 0, 1000000))
    shell_sort(generate_random_array(10000, 0, 1000000))
    count_sort(generate_random_array(10000, 50, 100))
    quick_sort(generate_random_array(10000, 0, 1000000))
    merge_sort(generate_random_array(10000, 0, 1000000))

最后附上一份 JavaPython 执行同样的排序逻辑的消耗时间对比。

  • 数据规模为 10000
  • 时间单位为毫秒
算法javaPython
冒泡排序17913996
选择排序463955
插入排序154074
希尔排序363
统计排序12
快速排序323
归并排序352

到此这篇关于使用Python实现七大排序算法的代码实例的文章就介绍到这了,更多相关Python七大排序算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python爬虫 urllib模块反爬虫机制UA详解

    python爬虫 urllib模块反爬虫机制UA详解

    这篇文章主要介绍了python爬虫 urllib模块反爬虫机制UA详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python使用pandas库导入并保存excel、csv格式文件数据

    python使用pandas库导入并保存excel、csv格式文件数据

    CSV格式文件很方便各种工具之间传递数据,平时工作过程之中会将数据保存为CSV格式,这篇文章主要介绍了python使用pandas库导入并保存excel、csv格式文件数据的相关资料,需要的朋友可以参考下
    2017-12-12
  • Python中XlsxWriter模块简介与用法分析

    Python中XlsxWriter模块简介与用法分析

    这篇文章主要介绍了Python中XlsxWriter模块用法,简单描述了XlsxWriter模块的功能并结合实例形式分析了Python使用XlsxWriter模块操作xls文件的数据插入、直方图等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • 如何用Python中Tushare包轻松完成股票筛选(详细流程操作)

    如何用Python中Tushare包轻松完成股票筛选(详细流程操作)

    这篇文章主要介绍了如何用Python中Tushare包轻松完成股票筛选(详细流程操作),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python爬虫之自动爬取某车之家各车销售数据

    Python爬虫之自动爬取某车之家各车销售数据

    应朋友要求,帮忙采集某车之家的一些汽车品牌的销售数据,包含购车时间、车型、经销商、裸车价等一类信息. 今天我们就简单演示一下采集过程,大家可以根据自己的兴趣进行拓展.比如采集自己喜欢的品牌汽车数据进行统计分析等等,需要的朋友可以参考下
    2021-06-06
  • Python 实现微信自动回复的方法

    Python 实现微信自动回复的方法

    这篇文章主要介绍了Python 实现微信自动回复的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • Python实现将HTML转为PDF/图片/XML/XPS格式

    Python实现将HTML转为PDF/图片/XML/XPS格式

    网页内容是信息传播的主要形式之一,这篇文章主要和大家介绍了如何使用Python实现将HTML分别转为PDF/图片/XML/XPS格式等,需要的可以参考下
    2024-03-03
  • python中前缀运算符 *和 **的用法示例详解

    python中前缀运算符 *和 **的用法示例详解

    这篇文章主要介绍了python中前缀运算符 *和 **的用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-05-05
  • PyTorch函数torch.cat与torch.stac的区别小结

    PyTorch函数torch.cat与torch.stac的区别小结

    Pytorch中常用的两个拼接函数torch.cat() 和 torch.stack(),本文主要介绍了这两个函数的用法加区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Python实现自动化测试的全指南

    Python实现自动化测试的全指南

    自动化测试是软件测试活动中的一个重要分支和组成部分,自动化测试究竟该如何实现,它是否仅仅是编写测试脚本那么简单,还是涉及更广泛的技术和流程,下面小编就来和大家详细讲讲
    2025-05-05

最新评论