目录
1.桶排序
桶排序是设计一定数值范围的桶,将属于这个范围的数值放在桶中,然后将元素在每个桶中排序,再按照桶的顺序输出桶中的排序。
def tong_sort(nums):
start = min(nums)
end = max(nums)
tong = (end - start) // len(nums)
tong_list = [[] for i in range(len(nums) + 1)]
for i in nums:
tong_list[int((i-start)//tong)].append(i)
nums.clear()
for i in tong_list:
for j in quick_sort(i):
nums.append(j)
return nums
def quick_sort(nums):
if len(nums) < 2:
return nums
mid = nums[0]
left = []
right = []
for i in nums[1:]:
if i <= mid:
left.append(i)
else:
right.append(i)
return quick_sort(left) + [mid]+quick_sort(right)
2.计数排序
计数排序就是将无序数组中的值将其出现的次数储存到新数组中,然后打印次数不为零的数值,有多少次打印多少个
无序数组:[8,5,6,5,3,2,2,9]
初始数组:[0,0,0,0,0,0,0,0,0,0]
出现次数:[0,0,2,1,0,2,1,0,1,1]
# 2.计数排序
# 计数排序按照我的理解就是将无序数组中的值将其出现的次数储存到新数组中,然后打印次数不为零的数值,有多少次打印多少个
def count_sort(nums):
if len(nums)<2:
return nums
s = []
arr = [0 for _ in range(max(nums)+1)]
for i in nums:
arr[i]+=1
for i in range(len(arr)):
if arr[i] != 0:
for j in range(arr[i]):
s.append(i)
return s
arr=[1,3,5,7,9,2,4,6,8,10]
print(count_sort(arr))
3.基数排序
先根据数组元素个位大小排序,再用刚刚排序一轮的数组根据元素十位大小排序,依次类推。
def radix_sort(arr):
n = len(str(max(arr))) # 记录最大值的位数
for x in range(n):#最大值位数轮排序
lis = [[] for i in range(10)]#每一位数字都是0到9
for i in arr:
lis[i//(10**x)%10].append(i) #把数值按照个位或十位的的大小存储到对应的数组位置上
# print(lis)
#下面的功能是:因为数组有些位置上是由多个相同个位组成的数组,所有需要对整个数组排序 [[], [81, 41], [62], [23], [], [], [16], [37], [], [59]]
arr = []
for i in lis:
for j in i:
arr.append(j)
return arr
arr=[1,3,5,7,9,2,0,4,6,8,10]
print(radix_sort(arr))
4.区别
桶排序:划分元素范围将范围内的元素放在一个桶,桶内再排序,按桶的顺序输出
计数排序:将元素出现的次数计数,有几次输出几次
基数排序:按元素的个位大小(相同个位存储在同一数组中),将刚刚个位排序的数组再按十位大小排序