快速排序的时间复杂度: O(nlogn)
快速排序: 快
快速排序思路:
- 取一个元素p (第一个元素), 使元素p归位:
- 列表被p分成两部分,左边都比p小,右边都比p大
- 递归完成排序
刚开始把5的元素存起来
找比5的大的数放到这个空位上
7比5大就放到上图的空位了
这样一次类推
def partition(li,left,right):
#刚开始初始把元素存在来,不能写零
tmp = li[left] #初始化5
while left < right:
#可能left=right 所以有left<right的判断 要不碰头要不就是找到了li[right] >=tmp:
while left < right and li[right] >=tmp: #从右边找比tmp(5)小的数
#这个就是指针
right -=1 #往左走一步
#小于tmp就换位置,值放到空位上
li[left] = li[right] #把右边的值写到左边空位上
print(li,'right')
while left < right and li[left] <=tmp:
#指针
left +=1
#大于tmp就换位置,把左边的值写到右边空位上
li[right] = li[left] #把左边的值写到右边空位上
print(li,'left')
li[left] = tmp #把tmp归为
li = [5,7,4,6,3,1,2,9,8]
print(li)
partition(li,0,len(li)-1)
print(li)