选择排序
复杂度分析
在最好/最坏的情况下,需要遍历 $n - 1$ 次,共进行 $n(n-1)/2$ 次比较。遍历/比较的时间复杂度是 $O(n^2)$。
选择排序是冒泡排序的改进。冒泡排序每一次比较出更大/更小值时都需要进行一次数据交换,但是选择排序只在遍历结束时进行一次数据交换,因此更快。
选择排序不是稳定排序。在排序的过程中,大小相等的两个元素的相对位置有可能发生改变。
实现
Rust
fn select_sort<T>(nums: &mut [T])whereT: std::cmp::PartialOrd + Clone + Copy,{for i in 0..(nums.len() - 1) {let mut m = nums[i];let mut k = i;for j in (i + 1)..nums.len() {if nums[j] < m {m = nums[j];k = j;}}nums.swap(i, k);}}
C++
template<typename T>void selectSort(T nums[], int size) {for (int i = 0; i < size - 1; i++) {int k = i;for (int j = i; j < size; j++) {if (nums[j] < nums[k])k = j;}std::swap(nums[i], nums[k]);}}
