編寫一個 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告