陣列中的第k小數

2021-10-03 10:32:46 字數 1904 閱讀 4191

描述

以盡量高效率求出亂序中的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。沒有想到什麼好...