package other_pratice
/*** 怎麼最快的求無序陣列的第k大元素。
** author:sxy
*/// 我們知道快排的排序是從大到小,還是從小到大取決於分割槽那個函式是如何寫的,本題是在陣列中尋找第幾大元素
// 所以需要在陣列的大小的順序要是從大到小
// 快速排序每次排序完找的 基準點即是第幾大元素。
// 如果 如果count==基準點+1;則基準點即是第幾大元素; 如果count《基準點+1,在左邊找; 如果count>基準點+1大於在右邊找。
func findnmaxindex(arr int, count int) int
func findnmaxindex(arr int, count, start, end int) int else if pivot+1 > count else
}// 如此排序的是陣列的的資料是從大到小的。
func partition(arr int, start, end int) int
i++} }
arr[i], arr[end] = arr[end], arr[i]
return i
}
測試
package other_pratice
import (
"fmt"
"testing"
)func testfindnmaxindex(t *testing.t)
arr1:=int
res:=findnmaxindex(arr1,3)
fmt.println(res)
}
output: 第3k大元素
=== run testfindnmaxindex
4--- pass: testfindnmaxindex (0.00s)
pass
process finished with exit code 0
如何在N個無序陣列元素中,查詢第K大元素
package com.lee.sort public class heapsort system.out.println 排序前.for int i 1 i array.length i system.out.println heap size array.length heapsort arra...
選擇第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 ...