第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))