Go语言 排序与搜索切片

Python012

Go语言 排序与搜索切片,第1张

Go语言标准库中提供了sort包对整型,浮点型,字符串型切片进行排序,检查一个切片是否排好序,使用二分法搜索函数在一个有序切片中搜索一个元素等功能。

关于sort包内的函数说明与使用,请查看 https://godoc.org/sort

在这里简单讲几个sort包中常用的函数

在Go语言中,对字符串的排序都是按照字节排序,也就是说在对字符串排序时是区分大小写的。

二分搜索算法

Go语言中提供了一个使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比较㏒₂n个元素,其中n为切片中元素的总数。

sort.Search(size,fn)函数接受两个参数:所处理的切片的长度和一个将目标元素与有序切片的元素相比较的函数,该函数是一个闭包,如果该有序切片是升序排列,那么在判断时使用 有序切片的元素 >= 目标元素。该函数返回一个int值,表示与目标元素相同的切片元素的索引。

在切片中查找出某个与目标字符串相同的元素索引

因为char *strings[]不是指针而是指针数组,那么

temp = strings[top]

strings[top] = strings[seek]

strings[seek] = temp

这种交换交换的就是主调函数中的数组中的指针,把指向字符串的指针顺序改变了,当然按次序输出就达到排序目的了……

package main

import "fmt"

func Bub(value []int) {

    flag := true //这里是打一个标识的意思

    for i := 0 i < len(value)-1 i++ { //每完成一次这里的循环,都会有一个元素冒泡到最上面

        flag = true

        fmt.Printf("i=%d j=%d\n", i, len(value)-i-1)

        for j := 0 j < len(value)-i-1 j++ {

            if value[j] > value[j+1] {

                value[j], value[j+1] = value[j+1], value[j]

                flag = false

            }

        }

        if flag == true { //当没有发生位置交换的时候说明,顺序排好了

            break

        }

    }

}

func main() {

    a := []int{7, 2, 1, 3, 5}

    Bub(a)

}

只能帮你到这里了,建议你用在纸上演算一遍 那个 a 变量