编写一个 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]

更新于: 2021年2月4日

276 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告