T28 求最小的K個數(利用快排)

2021-09-02 18:16:29 字數 676 閱讀 6487

題目:輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,

利用快排:利用temp=a[0];然後從右到左找比temp小的數 ,從左往右尋找比temp大的數  指標l=0;指標r=a.length-1 直到l=r

原始:4,5,1,6,2,7,3,8  temp=4  l=0;r=7;

第一趟:3,5,1,6,2,7,3,8    r=6 l=0  右

第二趟:   3,5,1,6,2,7,5,8  r=6;l=1  左

第三趟:    3,2,1,6,2,7,5,8   r=4,l=1  右

第四趟:  3,2,1,6,6,7,5,8   r=4,l=3 左

第五趟:3,2,1,6,6,7,5,8    l=r=3   右

最後令:a[l]=temp  即 3,2,1,4,6,7,5,8

public class getleastnumbers_solution1 

} for(int i=0;i=temp)

input[l]=input[r];

while(larray=new arraylist();

array=getleastnumbers_solution(a,6);

for(int i=0;i}

最小的k個數 第k小的數(利用快排,堆排序)

快排 若求top m個元素,則只需把下面的程式裡的k換乘n m即可 利用快排求最小的k個數,第k小的數 void getleastknum int input,int n,int output,int k else for int i 0 i 其中,output k 1 就是第k小的數 partit...

劍指40 最小的K個數 快排 利用紅黑樹

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法1 紅黑樹 插入 刪除 查詢o logk 整體時間o nlogk 遍歷輸入,用multiset儲存最小的k個數,一旦其中存入k個數後就對頭部進行比較 完成插刪 不更改輸入的內容...

尋找陣列中最小的k個數(快排和堆排)

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,public arraylistgetleastnumbers solution int input,int k int start 0 int end input.length ...