go 插入排序法

tech2023-10-26  93

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) }

 

最新回复(0)