Golang 程序实现插入排序


2022年5月7日, Learn eTutorial
1515

为了更好地理解这个示例,我们始终建议您学习下面列出的 Golang 编程 的基础主题

在这里我们将解释如何编写一个 Go 程序来实现排序。有不同类型的排序方法。在这种情况下,我们使用插入排序来对数组中的元素进行排序。插入排序是一种简单的技术,它是通过比较算法开发的。它的工作原理就像你在手中整理扑克牌一样。插入排序是一种比合并排序、堆排序或快速排序更有效和更高级的算法。

在这个 Go 程序中,在排序之前,我们必须设置一个起点,这有助于我们一致地朝一个方向前进,直到到达数组的末尾。这意味着数组首先被分成两个部分:已排序部分和未排序部分。最初,已排序部分只包含一个元素,即主数组的第一个元素,其余元素被视为未排序部分。从未排序部分中取最左边的元素,以在已排序部分中找到合适的位置。重复此过程,直到未排序子数组中没有元素。最后,未排序部分中的每个值都被插入到已排序部分的正确位置。

如何实现插入排序

在这个 Go 程序中,我们可以使用内置函数 fmt.println() 来打印任何内容,使用 fmt.scanln() 来读取值,这些方法都在 fmt 中定义。为了使用这些函数,我们需要导入“fmt”包。
 这里变量 A 存储数组元素。另一个变量 n 用作数组的大小。使用 for 循环读取数组元素并通过调用函数 insertionSort() 执行排序。

insertionSort() 通过在嵌套 for 循环中遍历整个数组元素开始。这意味着,如你所见,在此函数中,我们需要 2 个 for 循环,即外层循环和内层循环。

外层循环使用循环变量 j,它有助于从左到右遍历数组直到数组末尾,并选择一个 key,它有助于一致地朝一个方向前进,直到到达数组末尾,并在每次迭代中将 key 与左侧进行比较。请注意,最初我们从第二个元素(索引 1)中选取 key,以节省 1 次迭代,并有一个左侧可供与 key 进行比较。

在内层循环中,使用变量“i”,它有助于向后遍历左侧的元素。如果元素满足内层循环的排序条件:i>-1 && A[i] > key,则将左侧的所有元素移位为 A[i+1] = A[i]。其中条件 A[i]>key 用于升序排序。

在每次外层循环的 key 迭代中,我们将选定的 key 插入到其正确位置,并重复所有此过程,直到我们遍历所有 key。最后,排序后的数组返回到主函数,主函数将排序后的数组作为输出显示。

时间复杂度

  •  最佳复杂度:n
  •  平均复杂度:n^2
  •  最差复杂度:n^2
     

下面是在 Go 程序中实现插入排序的步骤。

算法

步骤1:导入包'fmt'。
步骤 2:打开 main() 开始程序,Go 程序执行从 main() 开始。
步骤 3:声明变量 n。
步骤 4:读取数组的大小为 n。
步骤 5:定义数组 A[]。
步骤 6:使用 'for 循环' 读取 A[] 数组元素。
步骤 7:通过调用函数 insertionSort (A, n) 执行选择排序
步骤8:使用for循环显示排序后的数组。
步骤 9:退出

实现 insertionSort (A, n) 的步骤

步骤 1:最初设置 j=1
步骤 2:使用 for 循环打开外层循环,该循环使用 j 循环变量。
步骤 3:如果外层循环满足 j
步骤 4:通过将 A[j] 赋值给 key 来选择一个 key,以便在每次迭代中与左侧进行比较?????
步骤 5:设置 i := j - 1
步骤 6:打开内层循环,该循环使用 'i' 变量。
步骤 7: 如果内层循环满足排序条件:i>-1 && A[i] > key,则将左侧的元素移位为 A[i+1] = A[i]。否则,转到步骤 9。
步骤 8:通过递减 'i' 的值来重复步骤 7,向后遍历左侧的元素,直到选定的 key 到达左侧的开头。
步骤 9:在每次外层循环的 key 迭代中,通过增加 j 的值,我们将选定的 key 插入到其正确位置为 A[i+1] = key。转到步骤 3
步骤 10:返回排序后的数组 A。

Golang 源代码

                                          package main

import (
  "fmt"
)

func main() {
  fmt.Println("Enter the size of the array")
 var n int
 fmt.Scan(&n)
 A := make([]int, n, 100)
fmt.Println("Enter elements of the array : ")

 for i := 0; i < n; i++ {
  fmt.Scan(&A[i])
 }
fmt.Println("Sorted array:")
   fmt.Println(insertionSort (A, n))

}

func insertionSort(A []int, n int) []int {
  for j := 1; j < n; j++ {
    key := A[j]
    i := j - 1
    for i > -1 && A[i] > key {
      A[i+1] = A[i]
      i -= 1
    }
    A[i+1] = key
  }
  return A
}

                                      

输出

Enter the size of the array
5
Enter elements of the array : 
32
24
56
85
63
Sorted array:
[24 32 56 63 85]