编写Golang程序以线性时间对二进制数组进行排序
有两种方法可以解决此问题。让我们检查第一种方法。
方法1
例子
输入数组=[1,0,1,0,1,0,0,1]=>[0,0,0,0,1,1,1,1]
解决这个问题的方法
步骤1: 定义一个接受数组的方法。
步骤2: 计数0。
步骤3:存储0直到计数变为0,然后在其余索引处存储1。
步骤4:最后,返回数组。
程序
package main
import "fmt"
func binarySort(arr []int) []int{
count := 0
for i:=0; i<len(arr); i++{
if arr[i]==0{
count++
}
}
for j:=0; j<len(arr); j++{
if j<count{
arr[j] = 0
} else {
arr[j] = 1
}
}
return arr
}
func main(){
fmt.Println(binarySort([]int{1, 0, 1, 0, 1, 0, 0, 1}))
fmt.Println(binarySort([]int{1, 1, 1, 1, 1, 1, 1, 1}))
fmt.Println(binarySort([]int{0, 0, 0, 0, 0, 0, 0, 0}))
}输出结果[0 0 0 0 1 1 1 1] [1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0]
方法2
现在,让我们检查第二种方法。
解决这个问题的方法
步骤1: 定义一个接受数组的方法。
步骤2: 声明枢轴元素及其索引j。
步骤3:迭代给定的数组。如果元素小于支点,则交换并增加支点的索引。
步骤4:最后,返回数组。
程序
package main
import "fmt"
func binarySort(arr []int) []int{
pivot := 1
index := 0
for i:=0; i<len(arr); i++ {
if arr[i]<pivot{
arr[i], arr[index] = arr[index], arr[i]
index++
}
}
return arr
}
func main(){
fmt.Println(binarySort([]int{1, 0, 1, 0, 1, 0, 0, 1}))
fmt.Println(binarySort([]int{1, 1, 1, 1, 1, 1, 1, 1}))
fmt.Println(binarySort([]int{0, 0, 0, 0, 0, 0, 0, 0}))
}输出结果[0 0 0 0 1 1 1 1] [1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0]
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下