基数排序是一种非比较整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较,基数排序首先按照最低有效位进行排序,然后依次按照次低有效位、第三低有效位等进行排序,直到最高有效位。
下面是一个使用Python实现的基数排序函数:
def radix_sort(lst): RADIX = 10 placement = 1 max_digit = max(lst) while placement < max_digit: buckets = [list() for _ in range(RADIX)] for i in lst: tmp = int((i / placement) % RADIX) buckets[tmp].append(i) a = 0 for b in range(RADIX): buck = buckets[b] for i in buck: lst[a] = i a += 1 placement *= RADIX return lst
这个函数接受一个列表作为输入,并返回一个已排序的列表,它首先确定最大的数有多少位(max_digit
),然后从最低有效位开始,将每个数放入相应的桶中,它将桶中的数重新放回原列表中,按照桶的顺序,这个过程会重复进行,每次处理更高的位数,直到处理完最高有效位。
下面是一个简单的示例,演示如何使用这个函数对一个包含随机整数的列表进行排序:
import random 生成一个包含随机整数的列表 random_list = [random.randint(1, 1000) for _ in range(20)] print("Original list:", random_list) 使用基数排序函数对列表进行排序 sorted_list = radix_sort(random_list) print("Sorted list:", sorted_list)
运行这段代码,你会得到类似以下的输出:
Original list: [345, 678, 123, 987, 456, 789, 234, 567, 890, 123, ...] Sorted list: [123, 123, 234, 345, 456, 567, 678, 789, 890, ...]
现在让我们回答两个与本文相关的问题:
问题1:基数排序的时间复杂度是多少?
答案1:基数排序的时间复杂度是O(nk),其中n是列表的长度,k是最大数的位数,这是因为我们需要对每一位进行排序,而每一次排序都需要遍历整个列表。
问题2:基数排序的空间复杂度是多少?
答案2:基数排序的空间复杂度是O(n + k),其中n是列表的长度,k是最大数的位数,这是因为我们需要额外的空间来存储桶和临时变量,在最坏的情况下,当所有元素都位于同一个桶中时,空间复杂度可以达到O(n + k)。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/576337.html