排序
- 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)
选择排序
- 该排序属于 贪心 策略
- 关注的是局部,是一种苟且的东西
Typescript 版算法实现
function selectionSort(nums: number[]) {
const len: number = nums.length;
for(let i: number = 0; i < len - 1; ++ i) {
let minIndex: number = i; // 注意这里更新
for(let j: number = i; j < len; ++ j) {
if(nums[j] < nums[minIndex]) {
minIndex = j; // 循环更新最小值
}
}
// 最小值与内层循环开始位置进行交换, 通过if做一下优化
if(i !== minIndex) {
[nums[i], nums[minIndex]] = [nums[minIndex], nums[i]]; // ES6 交换
}
}
}
const list: number[] = [5, 4, 3, 2, 1];
selectionSort(list);
console.log(list); // [1, 2, 3, 4, 5]
- 性能不好,比较简单,贪心
- 找到数组中最小值,选中它并将其放置于第一位(第一轮)
- 接着找到第二小的值,选中它并将其放置在第二位(第二轮)
- …
- 以此类推,执行n-1轮
- 注意,每一轮比较完毕,前面的都是有序的,可以跳过,不再比较
- 时间复杂度
- O(n^2)
Python3 版算法实现
1 ) 方案1
def selection_sort(nums: list) -> None:
length = len(nums)
for i in range(length - 1):
min_index = i # 注意这里更新
for j in range(i + 1, length):
if nums[j] < nums[min_index]:
min_index = j # 循环更新最小值
# 最小值与内层循环开始位置进行交换, 通过if做一下优化
if i != min_index:
nums[i], nums[min_index] = nums[min_index], nums[i] # 交换
# 示例用法
if __name__ == "__main__":
list_ = [5, 4, 3, 2, 1]
selection_sort(list_)
print(list_) # 输出: [1, 2, 3, 4, 5]
Golang 版算法实现
1 ) 方案1
package main
import (
"fmt"
)
func selectionSort(nums []int) {
length := len(nums)
for i := 0; i < length-1; i++ {
minIndex := i // 注意这里更新
for j := i + 1; j < length; j++ {
if nums[j] < nums[minIndex] {
minIndex = j // 循环更新最小值
}
}
// 最小值与内层循环开始位置进行交换, 通过if做一下优化
if i != minIndex {
nums[i], nums[minIndex] = nums[minIndex], nums[i] // 交换
}
}
}
func main() {
list := []int{5, 4, 3, 2, 1}
selectionSort(list)
fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}
1828



被折叠的 条评论
为什么被折叠?



