基数排序算法
基数排序算法是一种非比较排序算法,它的基本思是将待排序的元素按照位数切割成不同的数字,然后按照每个位数分别进行排序。具体步骤如下:
-
找出待排序数组中最大的数字,并确定其位数。
-
从最低位开始,按照每个位数进行排序。具体做法是,将待排序数组中的数字按照当前位数的值进行分组,然后按照每个组的顺序重新排列数组。
-
重复上述操作,直到将所有的位数都考虑完毕。
Python实现
以下是一个示例代码,用于实现上述步骤:
def radix_sort(arr):
max_num = max(arr)
digit = 0
while max_num > 0:
max_num //= 10
digit += 1
for i in range(digit):
buckets = [[] for _ in range(10)]
for num in arr:
buckets[(num // 10**i) % 10].append(num)
arr = [num for bucket in buckets for num in bucket]
return arr
这个代码定义一个名为radix_sort
的函数,它接受一个数组作为输入,并返回一个排序后的数组。函数使用两个嵌套的循环来实现基数排序算法。外层循环控制排序的位数,内层循控制每一位中数字的分组和排序。
示例1:对整数数组进行排序
让我们使用述代码对一个整数数组进行排序我们将以下代码:
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = radix_sort(arr)
print(sorted_arr)
这个代码定义了一个整数数组arr
,并将其传递给radix_sort
函数进行排序。排序后,我们将结果打到控制台。
输出结果:
[11, 12, 22, 25, 34, 64, 90]
这个结果表示,我们成功地使用基数排序算法对整数数组进行了排序。
示例2:对字符串数组进行排序
让我们使用上述代码对一个字符串数组进行排序。我们将以下代码:
arr = ['apple', 'banana', 'orange', 'pear', 'grape']
sorted_arr = radix_sort(arr)
print(sorted_arr)
这个代码定义了一个字符串数组arr
,并将其传递给radix_sort
函数进行排序。排序后,我们将结果打印到控制台。
输出结果:
['apple', 'banana', 'grape', 'orange', 'pear']
这个结果表示,我们成功地使用基数排序算法对字符串数组进行了排序。
总结
基数排序算法是一种非比较排序算法,它的实现相对较为复杂。在Python中,我们可以使用嵌套循环和桶来实现基数排序算法。无论是对整数数组还是字符串数组进行排序,基数排序算法都可以很好地工作。