使用快速排序,求最大的k個數

2021-07-01 23:11:37 字數 624 閱讀 9384

使用選擇排序的思想:時間複雜度o(n*k)

#includeusing namespace std;

void selectmax(int arr,int n,int k) }}

void selectsort(int arr,int n) }}

void swap(int &a,int &b)

int main(void)

; //selectsort(arr,8);

selectmax(arr,8,2);//最的兩個數字於陣列的最後。

for(int i = 0; i < 8; ++i) }

swap(arr[i + 1],arr[r]);

return i + 1;

}//begin代表開始的位置,end代表的結束的位置,k為最大的k+1個數

void kbig(int arr,int begin,int end,int k)

else//否則進入左區域 }

int main(void)

; partition(arr,0,7);

kbig(arr,0,19,4);

for(int i = 0; i < 20; ++i)

{ cout<

利用K 堆求最大的K個數

1.原理 1.1將資料存在陣列中,利用堆排排序陣列的前k個數 遞增 此時建立的是小堆,陣列的第乙個元素儲存堆中最小值。1.2從 k 1 個陣列元素遍歷到最後,每次都和堆頂元素對比,如果大於堆頂元素,交換兩者,調整堆。1.3輸出陣列前k個數,就是最大的k個數。include define k 3 vo...

leetcode 最小的k個數 使用快速排序

class solution int part vector arr,int begin,int end int pivot arr begin int i begin,j end while ipivot i用排序來做的,主要複習一下快速排序,寫乙個分割槽函式part,將陣列在begin end之...

第K個數 快速排序

題目描述 description 給定乙個長度為n 0輸入描述 input description 第一行為2個數n,k 含義如上題 第二行為n個數,表示這個序列 輸出描述 output description 如果m為質數則 第一行為 yes 沒有引號 第二行為這個數m 否則 第一行為 no 第二...