① 先判断是否需要进行随机划分即( kϵ( 1, n) ? n>1?);

② 产生随机数 j,选择划分基准,将 a[j]与 a[l]交换;

③ 以划分基准为轴做元素交换,使得一侧数组小于基准值,另一侧数组值大于基准值;

④ 判断基准值是否就是所需选择的数,若是,则输出;若不是对子数组 重复步骤②③

import time
import random

def look_for(L,left,right):
    m=random.randint(left,right)#产生随机数
    n=L[left]
    L[left]=L[m]
    L[m]=n #完成随机值与left交换
    if(left>=right):
        return L[left]
    if(left<=right):
        i=left
        j=right
        key=L[left]
        
        while i<j:
            while i < j and key<=L[j]:
                j-=1
            L[i]=L[j]#从右往左找到一个比key小的,将其赋值给基准值
            while i<j and L[i]<=key:
                i+=1
            L[j]=L[i]#从左往右找到一个比key大的,将其赋值给
        L[i]=key
        #已完成左侧比key小,右侧比key大
        if(len(L)%2==0 and i==int(len(L)/2)-1):
            return key
        elif(len(L)%2!=0 and i==int(len(L)/2)):
            return key
        if(i>int(len(L)/2)-1):
            return look_for(L,left,i-1)
        else:
            return look_for(L,i+1,right)
begin=time.clock()    
a=[6,1,2,7,3,4,5,8,9]
m=look_for(a,0,len(a)-1)
end=time.clock()
print(m)
print(end-begin)