从左边开始选出一个数,然后从最右边的数依次与之比较,小于选出的数就将右边那个数放置到选出的数原来的位置,如果真的有右边的数小于选出的数,那么放置完后就不在是拿右边的数与之比较了,而是拿左边的数,就这样每次改变都要换边,第一趟就能把选出的数放置相应的位置
最好情况下,快排时间复杂度为O(nlogn),冒泡时间复杂度为O(n)
一般情况下,快排时间复杂度为O(nlogn),冒泡时间复杂度为O(n^2)
最坏情况下,快排时间复杂度为O(n^2),冒泡时间复杂度为O(n^2)
import random def quick(list, left, right): if left < right: mid = partion(list, left, right) quick(list, left, mid-1) quick(list, mid+1, right) def partion(list, left, right): tmp = list[left] #选出的数,把他拿出来,也就是tmp while left < right: while left < right and list[right] >= tmp: #在右边的数大于选出的数情况下 right -= 1 #光标左移 list[left] = list[right] #右边的数放置到选出数的原来位置上 while left < right and list[left] <= tmp: #在左边的数小于选出的数情况下 left += 1 #光标右移 list[right] = list[left] #左边比较的数放置到右边的位置,右边的位置原来放到选出数的位置,所以这个位置是空的 list[left] = tmp #将选出的数放到改变后的位置 return left aa = list(range(10)) random.shuffle(aa) print(aa) quick(aa, 0, len(aa)-1) print(aa)