題目:輸入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 ...