快排的原理:
随便找一个元素,做为轴值,把列表分成左右两个列表,左列表都小于它,又列表都大于它,然后递归把左右列表再排序
规则
1.首先找到一个flag,一般取最后一个元素做轴值。(小于flag)
2,确定指针i,指向flag的前一个元素。i=start-1,i的初始值取-1;j=0 j指向遍历的元素
3,规则:用j指向的元素,和flag做比较。如果listx[j]>flag:pass;如果listx[j]<=flag:i+=1,listx[i]同listx[j]交换位置;
4、循环结束:listx[i+1]同list[end]交换,flag的下标变成了i+1
def quickSort(listx):
def pathSort(lista,sIndex,eIndex):
flag=lista[eIndex]
i=sIndex-1
for j in xrange(sIndex,eIndex):
if flag<lista[j]:
pass
else:
i+=1
lista[i],lista[j]=lista[j],lista[i]
print j
lista[eIndex],lista[i+1]=lista[i+1],lista[eIndex]
return i+1
def qSort(listb,sIndex,eIndex):
if sIndex>=eIndex:
return
middle=pathSort(listb,sIndex,eIndex)
qSort(listb,sIndex,middle-1)
qSort(listb,middle+1,eIndex)
print listb
qSort(listx,0,len(listx)-1)
return listx
if __name__ == '__main__':
print quickSort([6,1,34,36,4,45,5])
通过一段时间的学习,又发现了一种简单的写法,直接上代码:
def quickSort1(listx):
xlen=len(listx)
left=[]
right=[]
if xlen<2:
return listx
else:
flag=listx[0]
for i in xrange(1,xlen):
if listx[i]>flag:
right.append(listx[i])
else:
left.append(listx[i])
return quickSort(left)+[flag]+quickSort(right)
是不是更好理解呀!