排序
- 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)
插入排序
- 该排序属于 贪心 策略
- 关注的是局部,是一种苟且的东西
- 思路
- 从第二个数开始往前比
- 比它大就往后排
- 以此类推进行到最后一个数,最后一个是最大的,里面每一轮结束,里面都是有序的
Typescript 版算法实现
// 随机数组,插入排序
function insertionSort(nums: number[]) {
const len: number = nums.length;
for(let i: number = 1; i < len; ++ i) {
const tmp: number = nums[i]; // tmp记录当前开始处理的元素,就是你手中的当前要插入的牌
let j: number = i; // j从i开始
// while循环往前比
while(j > 0) {
if(nums[j - 1] > tmp) {
nums[j] = nums[j - 1] // 当前位置和前一个位置进行值交换
} else {
// 所有都有序
break;
}
--j;
}
// while循环之后,记录j的位置,j最终会降落到一个不能再降的位置(不一定是0)使之当前整体有序
// j 也就是 tmp 变量值应该插入的位置
// 交换开始位置,if 提高性能
if(i != j) {
nums[j] = tmp;
}
}
}
const list: number[] = [5, 4, 3, 2, 1];
insertionSort(list);
console.log(list); // [1, 2, 3, 4, 5]
- 在排序小型数组时,性能比选择排序和冒泡都要好,也是贪心算法
- 时间复杂度
- O(n^2)
Python3 版算法实现
1 ) 方案1
def insertion_sort(nums: list) -> None:
length = len(nums)
for i in range(1, length):
tmp = nums[i] # tmp记录当前开始处理的元素,就是你手中的当前要插入的牌
j = i # j从i开始
# while循环往前比
while j > 0:
if nums[j - 1] > tmp:
nums[j] = nums[j - 1] # 当前位置和前一个位置进行值交换
else:
# 所有都有序
break
j -= 1
# while循环之后,记录j的位置,j最终会降落到一个不能再降的位置(不一定是0)使之当前整体有序
# j 也就是 tmp 变量值应该插入的位置
# 交换开始位置,if 提高性能
if i != j:
nums[j] = tmp
# 示例用法
if __name__ == "__main__":
list_ = [5, 4, 3, 2, 1]
insertion_sort(list_)
print(list_) # 输出: [1, 2, 3, 4, 5]
Golang 版算法实现
1 ) 方案1
package main
import (
"fmt"
)
func insertionSort(nums []int) {
length := len(nums)
for i := 1; i < length; i++ {
tmp := nums[i] // tmp记录当前开始处理的元素,就是你手中的当前要插入的牌
j := i // j从i开始
// while循环往前比
for j > 0 {
if nums[j-1] > tmp {
nums[j] = nums[j-1] // 当前位置和前一个位置进行值交换
} else {
// 所有都有序
break
}
j--
}
// while循环之后,记录j的位置,j最终会降落到一个不能再降的位置(不一定是0)使之当前整体有序
// j 也就是 tmp 变量值应该插入的位置
// 交换开始位置,if 提高性能
if i != j {
nums[j] = tmp
}
}
}
func main() {
list := []int{5, 4, 3, 2, 1}
insertionSort(list)
fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}
1132



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



