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