七大排序算法的Python实现

2024-07-19 1818阅读

七大排序算法的Python实现

1. 冒泡排序 (Bubble Sort)

算法思想

冒泡排序通过重复交换相邻的未按顺序排列的元素来排序数组。每次迭代都将最大的元素“冒泡”到数组的末尾。

七大排序算法的Python实现
(图片来源网络,侵删)

复杂度分析

  • 时间复杂度: O(n^2)
  • 空间复杂度: O(1)
    def bubble_sort(arr):
        n = len(arr)
        for i in range(n):
            for j in range(0, n-i-1):
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
        return arr
    

    2. 选择排序 (Selection Sort)

    算法思想

    选择排序通过反复找到未排序部分中的最小元素并将其放置在已排序部分的末尾来排序数组。

    复杂度分析

    时间复杂度: O(n^2)

    空间复杂度: O(1)

    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]  
    

    3. 插入排序 (Insertion Sort)

    算法思想

    插入排序通过将未排序的元素插入到已排序部分的适当位置来排序数组。

    复杂度分析

    时间复杂度: O(n^2)

    空间复杂度: O(1)

    def insertion_sort(arr):
        n = len(arr)
        for i in range(1, n):
            key = arr[i]
            j = i-1
            while j >= 0 and key  
    

    4. 归并排序 (Merge Sort)

    算法思想

    归并排序是一个分治算法,通过将数组递归地分成两半,分别排序,然后合并排序结果来排序数组。

    复杂度分析

    时间复杂度: O(n log n)

    空间复杂度: O(n)

    def merge_sort(arr):
        if len(arr) > 1:
            mid = len(arr) // 2
            L = arr[:mid]
            R = arr[mid:]
            merge_sort(L)
            merge_sort(R)
            i = j = k = 0
            while i  
    

    5. 快速排序 (Quick Sort)

    算法思想

    快速排序是一个分治算法,通过选择一个“基准”元素,将数组分成小于基准和大于基准的两个部分,分别排序,然后合并排序结果来排序数组。

    复杂度分析

    时间复杂度: O(n log n) 平均, O(n^2) 最坏

    空间复杂度: O(log n)

    def quick_sort(arr):
        if len(arr)  pivot]
        return quick_sort(left) + middle + quick_sort(right)
    

    6. 堆排序 (Heap Sort)

    算法思想

    堆排序通过将数组构建成一个最大堆,然后反复从堆中取出最大元素并将其放置在数组的末尾来排序数组。

    复杂度分析

    时间复杂度: O(n log n)

    空间复杂度: O(1)

    def heapify(arr, n, i):
        largest = i
        l = 2 * i + 1
        r = 2 * i + 2
        if l  
    

    7. 希尔排序 (Shell Sort)

    算法思想

    希尔排序是插入排序的一种改进,通过比较相距一定间隔的元素来排序数组,然后逐渐缩小间隔,最终进行一次插入排序。

    复杂度分析

    时间复杂度: 最坏情况下 O(n^2),平均情况下介于 O(n) 和 O(n^2) 之间

    空间复杂度: O(1)

    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
    
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]