1.1.1. 一、数组冒泡排序的思想:

比如数组变量为arr:

  1. arr[0] 和 arr[1]比较,如果arr[0]数大,那把他们两个的位置交换。保证arr[1]是最大的数。
  2. 再把arr[1]和arr[2]比较,如果arr[1]数大,那把他们两个的位置交换。保证arr[2]是最大的数。
  3. 这样比较和交换了len(arr) 次之后。最后一个数就是这个数组中最大的数。

按照上面的3步循环比较。最终比较了len(arr) -1 个循环后。数组就排序好了。

1.1.2. 二、实现代码如下:

//冒泡排序
func BubbleSort(arrPoint *[5]int)  {
    fmt.Println("排序前的数组",*arrPoint)

    temp := 0 //临时变量(用着交换)
    for i := 0; i < len(*arrPoint) - 1; i++  {
        for j := 0; j < len(*arrPoint) -1 - i; j++ {
            if (*arrPoint)[j] > (*arrPoint)[j+1] {
                temp = (*arrPoint)[j]
                (*arrPoint)[j] = (*arrPoint)[j+1]
                (*arrPoint)[j+1] = temp
            }
        }
    }
}
func main() {
    intArr := [5]int{9,2,7,22,55}
    // 传递intArr的地址
    BubbleSort(&intArr)
    fmt.Println("排序后的数组",intArr)
}

运行结果:

排序前的数组 [9 2 7 22 55]

排序后的数组 [2 7 9 22 55]

代码说明:

  • 上面的代码中BubbleSort()函数使用指针传递。是为了函数内改变传递进来的数组。
  • *arrPoint 获取到数组。(*arrPoint)[j]获取到数组的第j个元素。

  • 不能在函数内把*arrPoint赋值给一个变量(如:arr :=*arrPoint),然后再对这个变量arr排序,这样影响不了外部的数组元素。因为数组的值传递,arr :=*arrPoint这个操作相当于拷贝了一份数组。和原来的数组没有关系。

results matching ""

    No results matching ""