python实现代码:
class Fast_rank:
def __init__(self):
from queue import Queue
self.qu=Queue()
def split(self,data_list,i,length):
left=list(filter(lambda x:x<data_list[i],data_list[i+1:i+length]))
right=list(filter(lambda x:x>=data_list[i],data_list[i+1:i+length]))
self.qu.put((i,len(left)))
self.qu.task_done()
self.qu.put((i+len(left)+1,len(right)))
self.qu.task_done()
data_list[i:i+length]=left+[data_list[i]]+right
def rank(self,data_list):
i=0
length=len(data_list)
self.qu.put((i,length))
while not self.qu.empty():
i,length=self.qu.get()
if length>1:
self.split(data_list,i,length)
return data_list
更简洁的方式:
def quicksort(data_list,i,length):
if length<=1:
return
left = list(filter(lambda x: x < data_list[i], data_list[i + 1:i + length]))
right = list(filter(lambda x: x >= data_list[i], data_list[i + 1:i + length]))
data_list[i:i+length]=left + [data_list[i]] + right
quicksort(data_list,i,len(left))
quicksort(data_list,i+len(left)+1,len(right))