十大排序算法精解与实战

堆排序的实现

堆排序基于二叉堆数据结构,通常使用数组实现。构建最大堆或最小堆后,通过反复提取堆顶元素完成排序。

构建最大堆的调整过程:

def heapify(arr, n, i):
    largest = i
    left = 2 * i + 1
    right = 2 * i + 2
    
    if left < n and arr[left] > arr[largest]:
        largest = left
        
    if right < n and arr[right] > arr[largest]:
        largest = right
        
    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[0], arr[i] = arr[i], arr[0]
        heapify(arr, i, 0)

计数排序的实现

计数排序适用于整数数据且范围不大的场景。统计每个元素出现次数后计算前缀和,确定元素最终位置。

实现步骤:

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

桶排序的实现

桶排序将数据分到有限数量的桶中,每个桶单独排序后合并。适用于均匀分布的数据。

典型实现:

def bucket_sort(arr, bucket_size=5):
    min_val, max_val = min(arr), max(arr)
    bucket_count = (max_val - min_val) // bucket_size + 1
    buckets = [[] for _ in range(bucket_count)]
    
    for num in arr:
        buckets[(num - min_val) // bucket_size].append(num)
    
    return [num for bucket in buckets for num in sorted(bucket)]

基数排序的实现

基数排序按数字的每位进行排序,从最低位到最高位依次处理。需要稳定的子排序算法(通常用计数排序)。

LSD(最低位优先)实现:

def radix_sort(arr):
    max_digits = len(str(max(arr)))
    
    for digit in range(max_digits):
        buckets = [[] for _ in range(10)]
        
        for num in arr:
            digit_val = (num // 10**digit) % 10
            buckets[digit_val].append(num)
        
        arr = [num for bucket in buckets for num in bucket]
    
    return arr

性能对比与适用场景

堆排序时间复杂度稳定为O(n log n),适合需要保证最坏情况性能的场景。计数排序在数据范围较小时效率可达O(n+k)。桶排序在数据分布均匀时性能优异。基数排序对数字位数固定的数据表现良好,时间复杂度为O(nk)。

BbS.okacop092.info/PoSt/1120_777786.HtM
BbS.okacop093.info/PoSt/1120_480030.HtM
BbS.okacop094.info/PoSt/1120_931936.HtM
BbS.okacop095.info/PoSt/1120_638764.HtM
BbS.okacop096.info/PoSt/1120_268857.HtM
BbS.okacop097.info/PoSt/1120_612403.HtM
BbS.okacop098.info/PoSt/1120_792362.HtM
BbS.okacop099.info/PoSt/1120_264167.HtM
BbS.okacop114.info/PoSt/1120_717492.HtM
BbS.okacop829.info/PoSt/1120_606240.HtM
BbS.okacop092.info/PoSt/1120_239397.HtM
BbS.okacop093.info/PoSt/1120_869510.HtM
BbS.okacop094.info/PoSt/1120_641603.HtM
BbS.okacop095.info/PoSt/1120_872339.HtM
BbS.okacop096.info/PoSt/1120_937232.HtM
BbS.okacop097.info/PoSt/1120_461270.HtM
BbS.okacop098.info/PoSt/1120_494828.HtM
BbS.okacop099.info/PoSt/1120_002256.HtM
BbS.okacop114.info/PoSt/1120_363564.HtM
BbS.okacop829.info/PoSt/1120_807944.HtM
BbS.okacop092.info/PoSt/1120_917891.HtM
BbS.okacop093.info/PoSt/1120_683984.HtM
BbS.okacop094.info/PoSt/1120_119279.HtM
BbS.okacop095.info/PoSt/1120_127851.HtM
BbS.okacop096.info/PoSt/1120_996497.HtM
BbS.okacop097.info/PoSt/1120_734856.HtM
BbS.okacop098.info/PoSt/1120_977364.HtM
BbS.okacop099.info/PoSt/1120_544560.HtM
BbS.okacop114.info/PoSt/1120_914096.HtM
BbS.okacop829.info/PoSt/1120_890369.HtM
BbS.okacop092.info/PoSt/1120_147216.HtM
BbS.okacop093.info/PoSt/1120_222607.HtM
BbS.okacop094.info/PoSt/1120_598073.HtM
BbS.okacop095.info/PoSt/1120_850124.HtM
BbS.okacop096.info/PoSt/1120_318429.HtM
BbS.okacop097.info/PoSt/1120_361097.HtM
BbS.okacop098.info/PoSt/1120_127470.HtM
BbS.okacop099.info/PoSt/1120_804074.HtM
BbS.okacop114.info/PoSt/1120_866349.HtM
BbS.okacop829.info/PoSt/1120_525272.HtM
BbS.okacop092.info/PoSt/1120_164562.HtM
BbS.okacop093.info/PoSt/1120_738115.HtM
BbS.okacop094.info/PoSt/1120_768560.HtM
BbS.okacop095.info/PoSt/1120_384151.HtM
BbS.okacop096.info/PoSt/1120_082638.HtM
BbS.okacop097.info/PoSt/1120_801906.HtM
BbS.okacop098.info/PoSt/1120_408665.HtM
BbS.okacop099.info/PoSt/1120_555412.HtM
BbS.okacop114.info/PoSt/1120_221021.HtM
BbS.okacop829.info/PoSt/1120_771745.HtM
BbS.okacop092.info/PoSt/1120_248283.HtM
BbS.okacop093.info/PoSt/1120_153688.HtM
BbS.okacop094.info/PoSt/1120_755907.HtM
BbS.okacop095.info/PoSt/1120_739756.HtM
BbS.okacop096.info/PoSt/1120_298756.HtM
BbS.okacop097.info/PoSt/1120_531925.HtM
BbS.okacop098.info/PoSt/1120_915921.HtM
BbS.okacop099.info/PoSt/1120_874136.HtM
BbS.okacop114.info/PoSt/1120_342876.HtM
BbS.okacop829.info/PoSt/1120_664547.HtM
BbS.okacop092.info/PoSt/1120_818286.HtM
BbS.okacop093.info/PoSt/1120_452992.HtM
BbS.okacop094.info/PoSt/1120_889559.HtM
BbS.okacop095.info/PoSt/1120_902961.HtM
BbS.okacop096.info/PoSt/1120_227124.HtM
BbS.okacop097.info/PoSt/1120_396360.HtM
BbS.okacop098.info/PoSt/1120_720316.HtM
BbS.okacop099.info/PoSt/1120_851936.HtM
BbS.okacop114.info/PoSt/1120_025156.HtM
BbS.okacop829.info/PoSt/1120_709801.HtM
BbS.okacop092.info/PoSt/1120_923566.HtM
BbS.okacop093.info/PoSt/1120_930739.HtM
BbS.okacop094.info/PoSt/1120_550518.HtM
BbS.okacop095.info/PoSt/1120_345310.HtM
BbS.okacop096.info/PoSt/1120_779710.HtM
BbS.okacop097.info/PoSt/1120_814131.HtM
BbS.okacop098.info/PoSt/1120_650228.HtM
BbS.okacop099.info/PoSt/1120_842388.HtM
BbS.okacop114.info/PoSt/1120_785766.HtM
BbS.okacop829.info/PoSt/1120_882697.HtM

#牛客AI配图神器#

全部评论

相关推荐

10-13 16:58
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务