十大排序算法精解与实战
堆排序的实现
堆排序基于二叉堆数据结构,通常使用数组实现。构建最大堆或最小堆后,通过反复提取堆顶元素完成排序。
构建最大堆的调整过程:
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

