直接插入排序,时间复杂度O(),空间复杂度O(1)。就地排序。稳定排序。
基本实现代码如下(已在leetcode提交通过)。题目链接
func sortArray(nums []int) []int {
l := len(nums)
if l < 2 {
return nums
}
for i := 1; i < l; i++ {
n := nums[i]
j := i-1
for j >= 0 && nums[j] > n {
nums[j+1] = nums[j]
j--
}
nums[j+1] = n
}
return nums
}
用copy做简单优化后的代码如下(已在leetcode提交通过)。题目同上。
func sortArray(nums []int) []int {
l := len(nums)
if l < 2 {
return nums
}
for i := 1; i < l; i++ {
n := nums[i]
j := i-1
for j >= 0 && nums[j] > n {
j--
}
k := j+1
if k < i {
c := i-k
switch c {
case 2:
nums[k+2] = nums[k+1]
fallthrough
case 1:
nums[k+1] = nums[k]
default:
copy(nums[k+1:], nums[k:i])
}
nums[k] = n
}
}
return nums
}