有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。
給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。
class
finder
intpartition
(vector<
int>
&arr,
int left,
int right)
arr[left]
= arr[right]
;while
(left < right && arr[left]
>= pivot)
arr[right]
= arr[left];}
arr[left]
= pivot;
return left;
}int
findk
(vector<
int>
& a,
int left,
int right,
int k)
else
if(pivot > k-1)
}return-1
;}};
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。
class
solution
int headsize = input.
size()
; vector<
int>res;
if(k ==
0|| k > headsize)
return res;
if(k == input.
size()
)return vector<
int>
(input.
begin()
, input.
end())
;
res.
push_back
(input[0]
);swap
(input[0]
,input[
--headsize]);
while
(--k )
return res;
}void
heapinsert
(vector<
int>
& a,
int index)
}void
heapify
(vector<
int>
&arr,
int index,
int size)}}
;
最簡快排模板 第k大數
這個快排模板,還是記住吧。邊界太複雜了,搞不懂搞不懂 它的思路和普通快排不是很一樣 普通快排的思想從任選乙個數,正常選中間,然後在陣列中找到這個數的位置,選定,繼續把這個數的左邊和右邊繼續遞迴搞完 這個快排就其實思路也差不多,它把小於等於x的搞在左邊,大於等於x的搞在右邊,然後繼續遞迴,就排完了,簡...
快速排序 快排求第K大
快速排序 快排採用分治的策略,先從數列中取出乙個元素作為作為基準元素,以基準元素為標準,將問題分解為兩個子串行,使小於基準的子串行在左側,使大於等於基準元素的子串行右側,對兩個子串行再進行快速排序,最終得到排好序的序列。時間複雜度 o nlogn 空間複雜度o logn 快速排序是不穩定的 code...
尋找第K大的數(快排思想)
使用快排思想找第k大的數,演算法複雜度o n 1.以陣列a的第0位a 0 為參考基準base,將陣列劃分為兩個部分 如果找第k大的數,則將大於base的數往前挪,將小於base的數往後挪。如果找第k小的數,則與此相反。劃分過程與快排相同,使用兩個指標i和j分別指向陣列的首尾,根據指標所指元素與基準b...