编写一个 Go 语言程序,在线性时间内对二进制数组进行排序
我们可以用两种方法解决这个问题。让我们检查第一种方法。
方法 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]
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP