第0个元素当作已排序
循环n-1轮
每轮取出第一个未排序元素,与已排序元素从后往前比较,如果比已排序元素小,则交换位置;
进入下一轮循环
空间复杂度:O(1)
时间复杂度:O()
for i := 1; i < len(nums); i++ {
for j := i; j > 0; j-- {
if nums[j] < nums[j-1] {
nums[j], nums[j-1] = nums[j-1], nums[j] //交换
}
}
}
优化:减少交换次数;
将每轮循环中,未排序元素保存到临时变量min,再与已排序元素从后往前比较,如果比已排序元素小,则已排序元素后移1位,最后将min插入到nums数组中,注意插入动作不能写bread前方,因为有可能插入0号位置,所有已排序元素后移,而未进入break;
for i := 1; i < len(nums); i++ {
min := nums[i]
j := i
for ; j > 0; j-- {
if min < nums[j-1] {
nums[j] = nums[j-1]
} else {
break
}
}
nums[j] = min
}