'''
找出陣列的第k大的數:[6,7,8,9, 3, 2, 4, 8]第3大的數是4
'''class solution:
def call(self, nums, k):
if nums == none or len(nums) == 0:
return -1
result = self.qsort(nums, 0, len(nums) - 1, k)
return result
def qsort(self, nums, l, u, k):
'''快排的一次快排操作函式
:param nums:
:param l: 左邊
:param u: 右邊
:param k: 第k大
:return:
'''if l >= u:
return nums[u]
m = l
for i in range(l + 1, u + 1): # u + 1保證遍歷到u位置的值
# 以nums[l]為基準,只要m右邊的比它大就轉到m左邊
if nums[i] > nums[l]:
m += 1
nums[m], nums[i] = nums[i], nums[m]
# 此時,m左邊的比nums[m]大,右邊的比nums[m]小
nums[m], nums[l] = nums[l], nums[m]
# m左邊有k-1個數時,第k大的數就是nums[m]
if m + 1 == k:
return nums[m]
elif m + 1 > k: # 左邊大於k-1個數時,第k大在左邊
return self.qsort(nums, l, m - 1, k)
else: # 小於k時,第k大在右邊
return self.qsort(nums, m + 1, u, k)
s = solution()
print(s.call([6, 7, 9, 3, 2, 4, 8], 4))
#第4大的是數字6
#6
找出第k大的數
問題 從乙個陣列裡面,找出第k大的數。題目很簡單,要想把第k個數找出來,其實也挺容易的。第一種方法 無非就是先排序,比如用merge sort演算法,整個演算法複雜度為 o nlgn 然後找到第k個即可。第二種方法 如果k很小,比如第五個最大的數,而整個陣列的長度非常的大,那麼,還有一種方法就是,我...
找出第k大的數
描述 使用者輸入n和k,然後接著輸入n個正整數 無序的 程式在不對n個整數排序的情況下,找出第k大的數。注意,第k大的數意味著從大到小排在第k位的數。輸入 n ka1 a2 a3 a4 an輸出 b輸入示例 5 232 3 12 5 89輸出示例 32提示 這是一道很經典的演算法問題,是公司面試的常...
從無序陣列中找出第K大的數
該題目的兩種實現方式,第一種是用堆排序 其中陣列用到了二叉樹的性質 第二種是利用快速排序來實現.最大堆進行公升序排序,主要步驟是 1.初始化堆 將數列a 1.n 構造成最大堆。2.交換資料 將a 1 和a n 交換,使a n 是a 1.n 中的最大值 然後將a 1.n 1 重新調整為最大堆。接著,將...