陣列 找出陣列的第k大的數

2021-09-12 16:43:45 字數 1085 閱讀 8607

'''

找出陣列的第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 重新調整為最大堆。接著,將...