GO语言实现冒泡排序、顺序查找、二分查找

2023-12-26 16:53:17
package main

import "fmt"

func main() {
    arr := [5]int{23, 56, 2, 117, 88} // 创建一个长度为5的整型数组arr,并赋值
    fmt.Println(arr)                  // 打印arr数组
    BubbleSort(&arr)                  // 调用BubbleSort函数对arr进行排序
    fmt.Println("sort:", arr)         // 打印排序后的arr数组
    //SequentialLookup() // 调用SequentialLookup函数
    fmt.Println("------------------------------") // 打印分隔线

    arrs := [10]int{1, 23, 45, 78, 90, 115, 456, 980, 1000, 1200} // 创建一个长度为10的整型数组arrs,并赋值
    search := binarySearch(arrs, 1)                               // 调用binarySearch函数在arrs中搜索元素1,并将结果赋值给search
    if search == -1 {                                             // 如果search为-1
       fmt.Println("不存在") // 打印"不存在"
    } else {
       fmt.Println(search) // 打印search
    }

    BinaryFind(&arrs, 0, len(arrs)-1, 15) // 调用BinaryFind函数在arrs中查找元素15
}

// BubbleSort 冒泡排序函数
func BubbleSort(arr *[5]int) {
    for i := 0; i < len(*arr)-1; i++ {
       swap := false // 判断是否交换
       for j := 0; j < len(*arr)-1-i; j++ {
          if (*arr)[j] > (*arr)[j+1] { // 如果arr[j]大于arr[j+1]
             (*arr)[j], (*arr)[j+1] = (*arr)[j+1], (*arr)[j] // 交换arr[j]和arr[j+1]
             swap = true                                     // 将swap设为true
          }
       }
       if !swap { // 如果没有发生交换
          break // 跳出循环
       }
    }
}

// 顺序查找函数
func SequentialLookup() {
    names := [5]string{"JOJO", "Tom", "打怪", "小怪", "lyrics"} // 创建一个长度为5的字符串数组names,并赋值
    var yourName string                                     // 创建一个字符串变量yourName
    fmt.Scanln(&yourName)                                   // 从命令行读取yourName的值
    index := -1                                             // 创建一个整型变量index,并赋值为-1
    for i := 0; i < len(names); i++ {                       // 遍历names数组
       if yourName == names[i] { // 如果yourName等于names[i]
          index = i // 将index设为i
       }
    }

    if index != -1 { // 如果index不等于-1
       fmt.Println("找到", yourName) // 打印"找到"和yourName
    } else {
       fmt.Println("没找到", index, yourName) // 打印"没找到"、index和yourName
    }
}

// 二分查找函数
func binarySearch(arrs [10]int, key int) int {
    left := 0              // 搜索范围左边界
    right := len(arrs) - 1 // 搜索范围右边界
    for right >= left {    // 当右边界大于等于左边界时
       mid := left + (right-left)/2 // 计算中间值的索引
       if arrs[mid] == key {        // 如果中间值等于key
          return mid // 返回中间值的索引
       }
       if key > arrs[mid] { // 如果key大于中间值
          left = mid + 1 // 将左边界设为mid+1
       } else {
          right = mid - 1 // 将右边界设为mid-1
       }
    }
    return -1 // 返回-1表示未找到
}

// BinaryFind 二分查找递归实现函数
func BinaryFind(arr *[10]int, left, right, key int) {
    if left > right { // 如果左边界大于右边界
       fmt.Println("不存在", key) // 打印"不存在"和key
       return                  // 结束函数
    }
    mid := (left + right) / 2 // 计算中间值的索引
    if key > (*arr)[mid] {    // 如果key大于中间值
       // 在右边查找
       BinaryFind(arr, mid+1, right, key)
    } else if key < (*arr)[mid] { // 如果key小于中间值
       // 在左边查找
       BinaryFind(arr, left, mid-1, key)
    } else {
       // arr[mid]==key
       fmt.Println("找到了值:", key, " ", mid) // 打印"找到了值:"、key和mid
    }
}

文章来源:https://blog.csdn.net/qq_49195366/article/details/135223528
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。