找到数组中第K大的数

快速排序法中的index就是这个数在数组中的排序,因此用快速排序即可很容易做到 /

找到了index即代表找到了第index大的数,同时将该数放到了这个位置(数组中的index位置)。

挖坑法、前后指针、左右指针子程序都不变。将分治法改一下即可

def quickArray(ary,left,right):
    if left<right:
        k=ary[right]
        cur=left
        pre=cur-1
        for cur in range (left,right):
            if ary[cur]<k:
                pre+=1
                if pre!=cur:
                    ary[pre],ary[cur]=ary[cur],ary[pre]
                cur+=1
            else:
                cur+=1
        ary[pre+1],ary[right]=ary[right],ary[pre+1]  
        print(ary)
        return pre+1

        
def quickSort(ary,left,right,k):
    index=quickArray(ary,left,right)#index代表在数组中位置,即将该数放到对应的正确的位置
    if (index!=k):#若index=k,则意味着k这个位置已经放好了,数组中第k大的数
        if index>k:
            quickSort(ary,left,index-1,k)#
        else:
            quickSort(ary,index+1,right,k)
    
        

array=[7,7,4,1,10,6,2,44,44,3,65,8,9,20,15]
k=1
quickSort(array,0,len(array)-1,k)
print(array[k])

 

点赞