一、无序数组
插入快,查找与删除慢
package main
import "fmt"
type Array struct {
StrArray []string
Size int
}
func NewArray(size int) *Array {
return &Array{StrArray: make([]string, size)}
}
func (arr *Array) Add(item string) {
arr.StrArray[arr.Size] = item
arr.Size++
}
func (arr *Array) Find(item string) int {
var index = -1
for i := 0; i < arr.Size; i++ {
if arr.StrArray[i] == item {
index = i
break
}
}
return index
}
func (arr *Array) Del(item string) bool {
if index := arr.Find(item); index != -1 {
for i := index; i < arr.Size-1; i++ {
arr.StrArray[i] = arr.StrArray[i+1]
}
arr.Size--
return true
}
return false
}
func main() {
newArr := NewArray(10)
newArr.Add("123")
newArr.Add("456")
fmt.Print(newArr.StrArray)
}
二、有序数组
查找快,插入与删除慢
package main
import "fmt"
type Array struct {
StrArray []string
Size int
}
func NewArray(size int) *Array {
return &Array{StrArray: make([]string, size)}
}
func (arr *Array) Add(item string) {
var insertPos = arr.Size - 1
for insertPos >= 0 && arr.StrArray[insertPos] > item {
arr.StrArray[insertPos + 1] = arr.StrArray[insertPos]
insertPos--
}
arr.StrArray[insertPos + 1] = item
arr.Size++
}
func (arr *Array) Find(item string) int {
var start, end = 0, arr.Size - 1
var mid int
if end < 0 {
return -1
}
for {
mid = int((start + end) / 2)
if item == arr.StrArray[mid] {
return mid
}
if mid == start {
if item == arr.StrArray[end] {
return end
} else {
return -1
}
}
if item < arr.StrArray[mid] {
end = mid
} else {
start = mid
}
}
}
func (arr *Array) Del(item string) bool {
if index := arr.Find(item); index != -1 {
for i := index; i < arr.Size-1; i++ {
arr.StrArray[i] = arr.StrArray[i+1]
}
arr.Size--
return true
}
return false
}
func main() {
newArr := NewArray(10)
newArr.Add("123")
newArr.Add("456")
newArr.Add("234")
fmt.Print(newArr.StrArray)
fmt.Print(newArr.Find("456"))
}