找到数组中第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])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值