package main
import "fmt"
func insterSort(arr []int) {
// 这是第一次------------------------------------------------------------------------
//获取一个比较的值. 用第二值和第一个值比较插入
// value := arr[1]
// index := 0 //1-1,第一个值的下标
// //开始比较,假设第二个值和前边n个值比较,前边是有序的数组
// // 当index>0或则value>arr[index]继续循环
// for index >= 0 && arr[index] < value {
// //从大到小排列,如果arr[index]<value arr[index]后移一位,要比较的index下标向前移动一位
// if arr[index] < value {
// arr[index+1] = arr[index]
// index--
// }
// }
// //当index有移动时
// //将value放置arr[index]的位置
// if index+1 != 1 {
// arr[index] = value
// }
// // 这是第二次比较--------------------------------------------------------------------------------------------
// //获取一个比较的值. 用第二值和第一个值比较插入
// value = arr[2]
// index = 1 //2-1,第一个值的下标
// //开始比较,假设第二个值和前边n个值比较,前边是有序的数组
// // 当index>0或则value>arr[index]继续循环
// for index >= 0 && arr[index] < value {
// //从大到小排列,如果arr[index]<value arr[index]后移一位,要比较的index下标向前移动一位
// if arr[index] < value {
// arr[index+1] = arr[index]
// index--
// }
// }
// fmt.Println("第二次比较完", arr)
// //当index有移动时
// //将value放置arr[index]的位置
// if index+1 != 2 {
// arr[index+1] = value
// }
// fmt.Println("第二次比较完并插入", arr)
//循环完成排序
for i := 1; i < len(arr); i++ {
//获取一个比较的值. 用第二值和第一个值比较插入
value := arr[i]
index := i - 1 //2-1,第一个值的下标
//开始比较,假设第二个值和前边n个值比较,前边是有序的数组
// 当index>0或则value>arr[index]继续循环
for index >= 0 && arr[index] < value {
//从大到小排列,如果arr[index]<value arr[index]后移一位,要比较的index下标向前移动一位
if arr[index] < value {
arr[index+1] = arr[index]
index--
}
}
fmt.Printf("第%d次比较完%v\n", i, arr)
//当index有移动时
//将value放置arr[index]的位置
if index+1 != i {
arr[index+1] = value
}
fmt.Printf("第%d次比较完并插入%v\n", i, arr)
}
}
func main() {
arr := []int{-1, 25, 12, 32, 4, 5}
fmt.Println("arr", arr)
insterSort(arr)
fmt.Println("arr", arr)
}