插入排序算法-insertSort
-
分析问题
从数组第二位数字开始和前面的数字分别比较,如果前面的数字较大,则前面的数字后移 -
设计算法
- 确定arr[i]位置的元素
- 将它与之前的元素arr[i-1]进行比较
- 如果它之前的元素arr[i-1]较大,则将该位置的元素arr[i]赋值为它之前的元素,即arr[i]=arr[i-1]
- 再将i-1,重复2和3的动作,直至i-1>=0
- 如果arr[i-1]<arr[i],则将arr[i]插入再这个位置上
-
编写程序
func main() { arr := []int{1, -2, 3, -4} var i, j int //声明全局变量 for i = 1; i < len(arr); i++ { //从第1位开始和前面的数比较,一直到最后一位数 temp := arr[i] //取出第i位,和前面i-1个数比较 for j = i; j > 0 && arr[j-1] > temp; { //判断成功 arr[j] = arr[j-1] //前一位后移 j-- } arr[j] = temp //将比较的数字移动到空位上 } fmt.Println(arr) }
-
调试程序
Output:
[-4 -2 1 3]