题目要求:
快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:
1.从序列中挑出一个元素,作为"基准"(pivot).
2.把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。
3.对每个分区递归地进行步骤1~2,递归的结束条件是序列的大小是0或1,这时整体已经被排好序了。
def quick_sort(data):
if len(data) >= 2:
midnum = round(len(data) / 2)
mid = data[midnum-1]
left, right = [], []
data.remove(data[midnum-1])
for num in data:
if num >= mid:
right.append(num)
else:
left.append(num)
return quick_sort(left) + [mid] + quick_sort(right)
else:
return data
data1 = [54,11,43,43,55,66,33]
print('排序前', data1)
print('排序后', quick_sort(data1))
n = int(input("请输入元素的个数\n"))
data2 = []
for i in range(n):
print(f'请输入第{i+1}个元素')
num = int(input())
data2.append(num)
print('排序前', data2)
print('排序后', quick_sort(data2))