Skip to content

Commit f3d9abc

Browse files
authored
Rollup merge of rust-lang#121187 - Takashiidobe:takashi/examples-for-quickselect, r=Nilstrieb
Add examples to document the return type of quickselect functions Currently, `select_nth_unstable`, `select_nth_unstable_by`, and `select_nth_unstable_by_key`'s examples do not show how to use the return values of the functions in an example, so this PR adds that in. Note: I didn't know what to call the parameters, so I settled on lesser, median, greater because the example is used for median finding so I retained that naming for the pivot, but lesser and greater are poor names for the example that sorts in descending order, because lesser and greater are then flipped. I think it's common to say "lo" and "hi" for low and high respectively, but that's also not great when the comparator flips the elements. Otherwise, "left" and "right" are also commonly used but I think that's poor naming because some languages read right to left so those names are also unintuitive. Lesser and greater are also not that great but I found a test that used `less`, `equal`, `greater` so I took that: https://github.com/rust-lang/rust/blob/dfa88b328f969871d12dba3b2c0257ab3ea6703a/library/core/tests/slice.rs#L1962
2 parents c7701ba + b49bd0b commit f3d9abc

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

library/core/src/slice/mod.rs

+21-6
Original file line numberDiff line numberDiff line change
@@ -3016,8 +3016,13 @@ impl<T> [T] {
30163016
/// ```
30173017
/// let mut v = [-5i32, 4, 2, -3, 1];
30183018
///
3019-
/// // Find the median
3020-
/// v.select_nth_unstable(2);
3019+
/// // Find the items less than or equal to the median, the median, and greater than or equal to
3020+
/// // the median.
3021+
/// let (lesser, median, greater) = v.select_nth_unstable(2);
3022+
///
3023+
/// assert!(lesser == [-3, -5] || lesser == [-5, -3]);
3024+
/// assert_eq!(median, &mut 1);
3025+
/// assert!(greater == [4, 2] || greater == [2, 4]);
30213026
///
30223027
/// // We are only guaranteed the slice will be one of the following, based on the way we sort
30233028
/// // about the specified index.
@@ -3067,8 +3072,13 @@ impl<T> [T] {
30673072
/// ```
30683073
/// let mut v = [-5i32, 4, 2, -3, 1];
30693074
///
3070-
/// // Find the median as if the slice were sorted in descending order.
3071-
/// v.select_nth_unstable_by(2, |a, b| b.cmp(a));
3075+
/// // Find the items less than or equal to the median, the median, and greater than or equal to
3076+
/// // the median as if the slice were sorted in descending order.
3077+
/// let (lesser, median, greater) = v.select_nth_unstable_by(2, |a, b| b.cmp(a));
3078+
///
3079+
/// assert!(lesser == [4, 2] || lesser == [2, 4]);
3080+
/// assert_eq!(median, &mut 1);
3081+
/// assert!(greater == [-3, -5] || greater == [-5, -3]);
30723082
///
30733083
/// // We are only guaranteed the slice will be one of the following, based on the way we sort
30743084
/// // about the specified index.
@@ -3122,8 +3132,13 @@ impl<T> [T] {
31223132
/// ```
31233133
/// let mut v = [-5i32, 4, 1, -3, 2];
31243134
///
3125-
/// // Return the median as if the array were sorted according to absolute value.
3126-
/// v.select_nth_unstable_by_key(2, |a| a.abs());
3135+
/// // Find the items less than or equal to the median, the median, and greater than or equal to
3136+
/// // the median as if the slice were sorted according to absolute value.
3137+
/// let (lesser, median, greater) = v.select_nth_unstable_by_key(2, |a| a.abs());
3138+
///
3139+
/// assert!(lesser == [1, 2] || lesser == [2, 1]);
3140+
/// assert_eq!(median, &mut -3);
3141+
/// assert!(greater == [4, -5] || greater == [-5, 4]);
31273142
///
31283143
/// // We are only guaranteed the slice will be one of the following, based on the way we sort
31293144
/// // about the specified index.

0 commit comments

Comments
 (0)