go语言编写算法
阅读原文时间:2023年08月12日阅读:4

1、冒泡排序

// 冒泡排序  
a := \[\]uint8{9, 20, 10, 23, 7, 22, 88, 102}  
for i := 0; i < len(a); i++ {  
    for k := i + 1; k < (len(a) - i); k++ {  
        if a\[i\] > a\[k\] {  
            a\[i\], a\[k\] = a\[k\], a\[i\]  
        }  
    }  
}  
fmt.Println(a)

冒泡排序

2、选择排序

// 选择排序  
a := \[\]int8{9, 20, -1, 10, -5, 23, 7, 22, 88, 102}  
for i := 0; i < len(a); i++ {  
    var (  
        min\_n int8 = a\[i\]  
        min\_i int  = i  
    )  
    for k := i + 1; k < len(a); k++ {  
        if a\[k\] < min\_n {  
            min\_n = a\[k\]  
            min\_i = k  
        }  
    }  
    a\[i\], a\[min\_i\] = a\[min\_i\], a\[i\]  
}  
fmt.Println(a)

选择排序

3、插入排序

a := \[\]int8{9, 20, 22, -1, 10, -5, 23, 7, 7, 22, 88, 102}  
for i := 1; i < len(a); i++ {  
    for k := i - 1; k >= 0; k-- {  
        if a\[k+1\] < a\[k\] {  
            a\[k+1\], a\[k\] = a\[k\], a\[k+1\]  
        }  
    }  
}  
fmt.Println(a)

插入排序

4、随机数出现的概率为平方

正常来讲,对于[0-10)范围内的任意一个整除的随机数概率为0.1,如果我要实现其中任意一个整数的随机数为0.1^2呢?

下面的示例中,是计算随机数为0-4范围的平方,正常来讲,0-4范围是5个,所以出现的概率为1/2。求其平方,即0.25

// 随机数的概率为平方  
var count float64 = 0  
for i := 0; i < 100000; i++ {  
    if rand.Intn(10) < 5 {  
        if rand.Intn(10) < 5 {  
            count++  
        }  
    }  
}  
p := count / 100000  
fmt.Println(p)

随机数平方概率

5、这是一个题目:

我当前有一个函数可以等概率随机返回[1-5]之间的任意一个数,在不使用内部函数的前提下,如何只根据当前的这个随机函数来等概率返回[1-7]中的任意一个数呢?

下面是这个随机函数:

func f1() int {
rn := rand.Intn(5) + 1
return rn
}

解题思路是这样的,可以先构造一个函数,等概率返回0和1,然后再构造一个函数,1-7中的数,可以用三个bit位来表示了,但是还有返回0的时候,当返回0的时候,扔掉,重新来随机

下面是等概率返回0和1的函数:

func f2() int {
for {
num_1 := f1()
if num_1 < 3 {
return 0
} else if num_1 == 3 {
continue
} else {
return 1
}
}
}

f2

下面是返回[1-7]的函数:

func f3() int {
for {
num_2 := (f2() << 2) + (f2() << 1) + f2()
if num_2 == 0 {
continue
} else {
return num_2
}
}
}

f3()