#!/usr/bin/env python3
# encoding: utf-8
import random
# 快速排序:快速排序不适宜解决有重复数据的排序
# 得到一个长度指定,值为0--100之间的的随机数组
def getrandata(num):
a = []
i = 0
while i < num:
a.append(random.randint(0,100))
i += 1
return a
# 进行排序
# 先从列表中随机取出一个值,然后拿列表中的其他值与这个值对比大小,比这个值大的放在右列表,比这个值小的放在左列表
# 递归调用该函数,对左右两个列表在次排序
def quicksort(num_list):
lenth = len(num_list)
if lenth <= 1:
return num_list
temi = random.randint(0,lenth -1)
tem = num_list[temi]
left = []
right = []
for i in range(0,lenth):
if num_list[i]>tem:
right.append(num_list[i])
elif num_list[i]<=tem:
left.append(num_list[i])
# 递归调用
return quicksort(left)+quicksort(right)
def checkrepeat(num_list):
num1 = []
for i in range(0,len(num_list)):
for k in range(i+1,len(num_list)):
if num_list[i] == num_list[k]:
num1.append(num_list[i])
k += 1
i += 1
return num1
if __name__ == '__main__':
a1 = getrandata(10) # 用函数生成10个随机数组成的列表
print("用函数生成10个随机数组成的列表:",a1)
s1 = set(a1)
repeat = checkrepeat(a1)
if len(s1) < len(a1):
print('验证生成的列表中有重复值%d个.'%(len(a1)-len(s1)))
print('重复的值为:',str(repeat))
a2 = list(s1)
else:
print('验证生成的列表没有重复值,可以进行快速排序:')
a2 = a1
b=quicksort(a2) # 用函数进行快速排序处理
if len(repeat)>0:
print('排序后生成的内容:', b)
for i in repeat:
b.insert(b.index(i),i) # 在指定的位置插入指定的值
print('补上重复值后的结果为:',b)
else:
print('排序后生成的内容:', b)
Python--排序--快速排序
最新推荐文章于 2024-05-06 00:08:33 发布