Golang排序和查找

排序

  1. 内部排序
    指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
  2. 外部排序
    数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
  • 冒泡排序
    func BubbleSort(arr *[5]int) {
        fmt.Println("排序前arr=", (*arr))
        temp := 0 //临时变量(用于做交换)

        //冒泡排序..一步一步推导出来的
        for i :=0; i < len(*arr) - 1; i++ {
            for j := 0; j < len(*arr) - 1 - i; j++ {
                if (*arr)[j] > (*arr)[j + 1] {
                    //交换
                    temp = (*arr)[j]
                    (*arr)[j] = (*arr)[j + 1]
                    (*arr)[j + 1] = temp
                }
            }
        }
        fmt.Println("排序后arr=", (*arr))
    }

查找

在 Golang 中,我们常用的查找有两种:

  1. 顺序查找
  2. 二分查找(该数组是有序)
  • 二分查找
    func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {
        //判断leftIndex 是否大于 rightIndex
        if leftIndex > rightIndex {
            fmt.Println("找不到")
            return
        }

        //先找到 中间的下标
        middle := (leftIndex + rightIndex) / 2

        if (*arr)[middle] > findVal {
            //说明我们要查找的数,应该在  leftIndex --- middel-1
            BinaryFind(arr, leftIndex, middle - 1, findVal)
        } else if (*arr)[middle] < findVal {
            //说明我们要查找的数,应该在  middel+1 --- rightIndex
            BinaryFind(arr, middle + 1, rightIndex, findVal)
        } else {
            //找到了
            fmt.Printf("找到了,下标为%v \n", middle)
        }
    }
posted @ 2020-09-03 14:16  养诚  阅读(158)  评论(0编辑  收藏  举报