描述
以盡量高效率求出亂序中的k小數
輸入
第一行 陣列長度
第二行 陣列元素 空格隔開
第三性 第幾小的數
輸出
第k小的數
樣例輸入
5樣例輸出 解題思路利用快速排序找到主元的位置,判斷主元是第幾小的6 1 2 9 3 8
2
主元位置大了剪掉右邊的
主元位置小了剪掉左邊的
假設要找第三小的數
主元的位置比最要找數大時剪掉右邊的
主元的位置比要找的數小時剪掉左邊的
**示例
/*
* @description:
* 尋找k小數
* @param arr
* 整型陣列
* @param begin
* 下標開始
* @param end
* 下標結尾
* @param k
* 第幾小的數
* @return
* 返回整數
*/static
intselectk
(int
arr,
int begin,
int end,
int k)
else
if(qk
return arr[q];}
/* * @description:
* 找到較為中間值
* @param arr
* 陣列
* @param begin
* 下標開頭
* @param end
* 下標結尾
* @return
* 返回中間值位置
*/static
intpartition
(int
arr,
int begin ,
int end)
else
if(arr[end]
>=arr[begin]
&& arr[end]
<=arr[indexmid]
) util.
swap
(arr, begin, indexmid)
;//把三點確定法確定的值和第乙個值交換,這樣不影響
int poivt = arr[begin]
;int left = begin+1;
int right = end;
while
(left<=right)
util.
swap
(arr, begin, right)
;return right;
}
我這裡除錯是直接呼叫乙個隨機的陣列
public
static
void
main
(string[
] args)
結果 求陣列中第k個最小數
一 問題描述 給定乙個陣列,陣列中的資料無序,在乙個陣列中找出其第k個最小的數,例如對於陣列x,x 則其第2個最小的數為2。二 解題思路 本演算法跟快排的思想相似,首先在陣列中選取乙個數centre作為樞紐,將比centre小的數,放到centre的前面將比centre大的數,放到centre的後面...
牛客 第k小數 線性尋找第 k 小數
題目大意 給出長度為 n 的數列 a 要求找到第 k 小的數 題目分析 因為資料給的足夠大,所以約束就是必須線性完成操作,stl 中的 nth element 函式可以完美實現操作,算是學到了一波,格式 nth element a.begin a.begin k a.end 那麼 a k 就是第 k...
求第k小數
求第k小數,無非就是考查排序,請參考我最新的博文吧求第k小數 直接使用priority queue,在網上看到許多使用快排來求第k小數都是認為第k小就是排好序陣列中第k個元素,但是如果陣列中有相同的元素呢,例如 1,2,2,2,3,5 認為第三小是3還是2呢?我刷題時遇到的是認為是3。沒有想到什麼好...