快排
快速排序
快排的思路:
快速排序代码--第一步
怎么写partition函数?
import time import random def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() result=func(*args,**kwargs) t2=time.time() print("%s running time: %s secs." %(func.__name__,t2-t1)) return result return wrapper def quick_sort_x(data,left,rigrt): # 因为这个为递归 , 所以不能直接进行赋值 计算 if left < rigrt : # 目的是让中间值 的 左边右边 不相碰 mid = partition(data,left,rigrt) quick_sort_x(data,left,mid - 1) quick_sort_x(data,mid + 1,rigrt) def partition(data,left,right): tmp = data[left] # 另最左边的值为中间值 , 并且取出 使这个值得序列号空置 while left < right: # 目的是让中间值 的 左边右边 不相碰 while left < right and data[right]>=tmp: # 当左边小于右边 且 右边的值 大于 中间值 right -= 1 # 右边的值得序列号向左移动一位 data[left] = data[right] # 如果右边的值 小于 中间值的话 ,则 将小于中间值的这个值 放置在 原本 中间值所在的序列号上 while left < right and data[left] <=tmp: # 若左边的值 小于 中间值 left += 1 # 左边值得序列号向右移动一位 data[right] = data[left] # 若左边的值 大于 中间值的话 , 则将这个大于中间值得这个值 放置在 上一个 右边所空置的序列号上 data[left] = tmp # 最后,将这个中间值 放在在最后的一个位置上 return left @cal_time def quick_sort(data): return quick_sort_x(data,0,len(data) - 1) data = list(range(1000)) quick_sort(data) print(data)
算法所呈现的效果为:
bubble_sort running time: 0.3220186233520508 secs.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ···················985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999]
快排的效率:
快排的问题:
1、问题
在一些环境中,可能快排的速率比冒泡还慢
2、递归
----------------------------------