功能:实现优化的快速排序算法yoursort():随待排序的数据量逐步增大的变化情况,分析总结出一个优化的快速排序算法yoursort()。 提示:
有些算法对小规模的数据量排序效率高,有些算法对大规模数据量排序效率高。提供了部分可供使用的接口:(直接使用,不需要导入)
Profiler类的对象 profiler = Profiler()
可用的方法:
– 1.profiler.comparison(), 记录比较次数
– 2.profiler.startClock(), 记录运行开始时间
– 3.profiler.stopClock(), 记录运行结束时间
– 4.profiler.exchange(), 记录交换次数
– 5.swap(l: list, i: int, j: int, profiler: Profiler), 交换函数,l要交换的列表,i,j交换的元素位置,同时记录交换次数,使用swap函数交换就可不使用profiler.exchange()
#randint
# 请使用本题提供函数接口完成本题
def yoursort(a_list, profiler:Profiler):
#注意参照参考代码在比较的位置添加profiler.comparison(),交换使用给出的Swap()接口
pass # 请完成
'''参考代码,使用了Profiler类的快速排序代码,给出优化后的代码
def quicksort(a_list, profiler:Profiler):
quick_sort(a_list, 0, len(a_list) - 1, profiler)
def quick_sort(a_list, first, last, profiler:Profiler):
if first < last:
split = partition(a_list, first, last, profiler)
quick_sort(a_list, first, split - 1, profiler)
quick_sort(a_list, split + 1, last, profiler)
def partition(a_list, first, last, profiler:Profiler):# a_list[first]基准元素
left = first
right = last +1
while True: # 检测整个序列,进行划分,寻找基准记录定位位置
while True:
left += 1
profiler.comparison()
if left == last or a_list[left] >= a_list[first]: # 左边找到要交换的对象
break # 停在相等的键上
while True:
right -= 1
profiler.comparison()
if right == first or a_list[right] <= a_list[first]: # 右边找到要交换的对象
break # 停在相等的键上
if left < right: # 检查指针是否交叉
#a_list[left], a_list[right] = a_list[right], a_list[left] #交换
swap(a_list, left, right, profiler)
else:
break
#a_list[first], a_list[right] = a_list[right], a_list[first] # 与基准对象交换
swap(a_list, first, right, profiler)
return right
'''
要求:1、yoursort()能对任意列表正确、快速地排序。2、你的yoursort()是快速排序的优化,而不是python的内置排序算法或者其它类型的排序算法。