快速排序算法,平均时间复杂度O(nlogn):
python 实现:
import random
import sys
#sys.setrecursionlimit(9)
A=[x for x in range(10000)]
random.shuffle(A)
def quick_sort(A,p,r):
if p < r:
q=partition(A,p,r)
quick_sort(A,p,q-1)
quick_sort(A,q+1,r)
def partition(A,p,r):
x = A[r]
i = p-1
for j in range(p,r):
if A[j] <= x:
i +=1
A[i],A[j] = A[j],A[i]
A[i+1],A[r] =A[r],A[i+1]
return i+1
quick_sort(A,0,len(A)-1)
print A
random版本:
import random
import sys
#sys.setrecursionlimit(9)
A=[x for x in range(10000)]
random.shuffle(A)
def quick_sort(A,p,r):
if p < r:
q=partition(A,p,r)
quick_sort(A,p,q-1)
quick_sort(A,q+1,r)
def partition(A,p,r):
x = random.randint(p,r)
A[x],A[r] = A[r],A[x]
i = p-1
for j in range(p,r):
if A[j] <= A[r]:
i +=1
A[i],A[j] = A[j],A[i]
A[i+1],A[r] =A[r],A[i+1]
return i+1
quick_sort(A,0,len(A)-1)
print A