本文簡要介紹rust語言中 slice.sort_by_cached_key
的用法。
用法
pub fn sort_by_cached_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: Ord,
使用鍵提取函數對切片進行排序。
在排序期間,每個元素隻調用一次鍵函數。
這種排序是穩定的(即不重新排序相等的元素)並且 O(m * n + n * log(n)) 最壞情況,其中關鍵函數是 O(m)。
對於簡單的鍵函數(例如,作為屬性訪問或基本操作的函數), sort_by_key
可能更快。
當前實施
當前算法基於 Orson Peters 的pattern-defeating quicksort,它將隨機快速排序的快速平均情況與堆排序的快速最壞情況結合起來,同時在具有某些模式的切片上實現線性時間。它使用一些隨機化來避免退化情況,但使用固定種子始終提供確定性行為。
在最壞的情況下,算法會在Vec<(K, usize)>
中分配臨時存儲片的長度。
例子
let mut v = [-5i32, 4, 32, -3, 2];
v.sort_by_cached_key(|k| k.to_string());
assert!(v == [-3, -5, 2, 32, 4]);
相關用法
- Rust slice.sort_by_key用法及代碼示例
- Rust slice.sort_by用法及代碼示例
- Rust slice.sort_unstable_by_key用法及代碼示例
- Rust slice.sort_unstable_by用法及代碼示例
- Rust slice.sort_unstable用法及代碼示例
- Rust slice.sort用法及代碼示例
- Rust slice.swap_unchecked用法及代碼示例
- Rust slice.split_array_mut用法及代碼示例
- Rust slice.splitn_mut用法及代碼示例
- Rust slice.split_first用法及代碼示例
- Rust slice.splitn用法及代碼示例
- Rust slice.split_array_ref用法及代碼示例
- Rust slice.swap_with_slice用法及代碼示例
- Rust slice.swap用法及代碼示例
- Rust slice.split用法及代碼示例
- Rust slice.split_inclusive用法及代碼示例
- Rust slice.split_mut用法及代碼示例
- Rust slice.strip_suffix用法及代碼示例
- Rust slice.split_last_mut用法及代碼示例
- Rust slice.split_first_mut用法及代碼示例
- Rust slice.select_nth_unstable用法及代碼示例
- Rust slice.split_at_mut用法及代碼示例
- Rust slice.select_nth_unstable_by用法及代碼示例
- Rust slice.split_at_unchecked用法及代碼示例
- Rust slice.split_at用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 slice.sort_by_cached_key。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。