經典排序 第k個元素(快排和雙向掃瞄法)

2021-10-03 02:53:25 字數 1031 閱讀 2419

一、第k個元素:以盡量高的效率求出乙個亂序陣列中按數值順序的第k個元素

亂序陣列

法一:利用快速排序,演算法時間複雜度o(nlogn)

法二:利用分割槽排序法(雙向掃瞄法)

依次與主元比較,比主元大的排在右面不變,比主元小的指標交換位置,得到如下陣列

偽**

selectk

(a,p,r,k)

partition

(a,p,r)

**

package selectk;

public

class

selectk

private

static

intpartition

(int

a,int p,

int r)

public

static

void

main

(string[

] args)

;int k=

selectk

(a,0

,a.length,2)

; system.out.

println

(k);

assertionerror.

assertthat

(k).

isequalto(2

);}}

快速排序 快排求第K大

快速排序 快排採用分治的策略,先從數列中取出乙個元素作為作為基準元素,以基準元素為標準,將問題分解為兩個子串行,使小於基準的子串行在左側,使大於等於基準元素的子串行右側,對兩個子串行再進行快速排序,最終得到排好序的序列。時間複雜度 o nlogn 空間複雜度o logn 快速排序是不穩定的 code...

選擇第K大元素(快排 快選以及k 選取比較)

先看執行結果 按照書中所給的快排 快選以及k 選取演算法分別寫出函式檢測執行結果以及時間 發現不出所料的直接快排演算法會慢很多,但預想更穩定的k 選取演算法的耗時比預期設想要大,而相對不太穩定的快選演算法卻是三者之中最快的,為了避免偶然性,又重複做了多組實驗,並將n的範圍擴大到100 1000000...

快排思想之陣列中的第K個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4class solution object ...