第K大的数

第K大的数

方法一:冒泡排序&&选择排序O(N*K)

冒泡排序:

a  = [1,3,2,3,4,5]
nums = len(a)
k = 5

def find(a, k):
    for i in range(k):
        for j in range(nums-1, i, -1):
            if a[j] > a[j-1]:
                a[j-1], a[j] = a[j], a[j-1]
    return a[k-1]

print(find(a, k))

选择排序:

a  = [1,3,2,3,4,5]
nums = len(a)
k = 5

def find(a, k):
    for i in range(k):
        maxx = a[i]
        for j in range(i+1, nums):
            if maxx < a[j]:
                maxx = a[j]
                a[i], a[j] = a[j], a[i]
    return a[k-1]

print(find(a, k))

方法二:快速排序O(N)

a  = [1,3,2,3,4,5]
nums = len(a)
k = 5

def find(a, k, l, r):
    if l >= r:
        return 

    x = a[l]
    i = l
    j = r
    while i < j:
        while i < j and x <= a[j]:
            j = j - 1
        a[i] = a[j]
        while i < j and x >= a[i]:
            i = i + 1
        a[j] = a[i]
    
    a[i] = x

    if i == k-1:
        return x
    elif i > k-1:
        return find(a, k, l, i-1)
    else:
        return find(a, k, i+1, r)


print(find(a, k, 0, nums-1))

猜你喜欢

转载自blog.csdn.net/winycg/article/details/126409055
今日推荐