快速排序的基本思想
快速排序(Quicksort)是对冒泡排序的一种改进。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
编写思路是:
1、确认一个中间值,一般中间为列表中第一位元素,则是mid_val=list1[first]
2、通过循环把比中间值大的放置中间值的右边,比中间值小的放置中间值的左边
这里就涉及到两个数值交换位置。
3、通过中间值将原本的列表分成了两端,一端是小数字列,一端是大数字列,那接下来通过递归方式,将小数字列和大数字列继续排好位置
def quit_sort(a,left,right):
if left>right:
return
t=a[left]
low=left
high=right
while low<high:##直到指针重叠
while a[high]>=t and low<high:##从右边开始找到第一个比基准小的数
high-=1
while a[low]<=t and low<high:##从左边开始找到第一个比基准大的数
low+=1
a[low],a[high]=a[high],a[low]##将比基准小的数和比基准大的数调换位置
##当跳出循环这一刻肯定出现low==high,a[low],a[high]=a[high],a[low]就没有意义了
##那中间这个数肯定是比基准小的数,因此执行下面的两个
a[left]=a[low]##将比基准小的数放到第一位上
a[low]=t##将基准的数 low位上~
##通过基准分区上下两个区域
##一个是比基准小的 一个是比基准大的,那么接着递归解决问题就ok了
quit_sort(a, left,high-1)
quit_sort(a, high+1, right)
a=[2,8,7,1,3,5,6,4]
quit_sort(a,0,len(a)-1)
print (a)