1.1.1. 一、插入排序法思想:

插入排序(Insertion Sorting)的基本思想是:如果一个数组有n个元素。那除了第一个之外。把后面的数和前面的数比较。找到位置之后插入。数组前面的数有序,后面的数无序。

例如:把一个数组:[23,45,67,1,6] 从大到小排序。第一个数23不变,从第二个数45开始和前面的数比较。比前面的数大,说明这个数的位置还需要往前面,继续往前比较下一个。直到比较当前数比前面的数小或者比较完所有的数(当前数最大)。

  • 第一个数23不变,从第二个数45开始和前面的数比较。得到:[45,23,67,1,6]
  • 第2回比较,得到:[67,45,23,1,6]
  • 第3回比较,得到:[67,45,23,1,6]
  • 第4回比较,得到:[67,45,23,6,1]

1.1.2. 二、代码实现如下:

//插入排序:从大到小排列
func InsertSort(arr *[5]int)  {

    // 第一个除外,其他元素依次和前面的元素比较。
    for i:=1; i < len(arr); i++  {
        insertVal := arr[i]
        insertIndex := i - 1

        // insertVal 依次和前面的元素比较。
        for insertIndex >= 0 && arr[insertIndex] < insertVal {
            arr[insertIndex + 1] = arr[insertIndex] //数据后移
            insertIndex -- // 从当前元素 insertIndex 往前一直比较。

        }
        // 插入
        if insertIndex + 1 != i{
            arr[insertIndex + 1] = insertVal
        }

    }

}

说明:

1、insertVal 是当前要比较的元素的值。

2、insertIndex 是比较结束后,元素应该插入的位置。

  • 测试代码
func main() {

    nums := [5]int{23,45,67,1,6}

    //排序
    InsertSort(&nums)

    fmt.Println(nums)
}

results matching ""

    No results matching ""