package main
import (
"fmt"
"math/rand"
)
func BubbleSort(arr []int) {
for i := 0; i < len(arr); i++ {
flag := false
for j := 0; j < len(arr)-i-1; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = true
}
}
if flag == true {
break
}
}
}
func insertSort(arr []int) {
for i := 1; i < len(arr); i++ {
for j := i; j > 0; j-- {
if arr[j] < arr[j-1] {
arr[j], arr[j-1] = arr[j-1], arr[j]
}
}
}
}
func getIndex(left, right int, arr []int) int {
tmp := arr[left]
for left < right {
for left < right && arr[right] > tmp {
right--
}
arr[left], arr[right] = arr[right], arr[left]
for left < right && arr[left] <= tmp {
left++
}
arr[left], arr[right] = arr[right], arr[left]
}
arr[left] = tmp
return left
}
func QuickSort(left, right int, arr []int) {
if left < right {
index := getIndex(left, right, arr)
QuickSort(left, index-1, arr)
QuickSort(index+1, right, arr)
}
}
func mergeTwoSlice(left, mid, right int, arr []int) {
i, j, k := left, mid+1, left
tmp := make([]int, right-left+1, len(arr))
copy(tmp, arr[left:left-right+1])
for i <= mid && j <= right {
if tmp[i-left] < tmp[j-left] {
arr[k] = tmp[i-left]
k++
i++
} else {
arr[k] = tmp[j-left]
k++
j++
}
}
for i <= mid {
arr[k] = tmp[i-left]
k++
i++
}
for j <= right {
arr[k] = tmp[j-left]
k++
j++
}
}
func mergeSort(left, right int, arr []int) {
if left < right {
mid := (left + right) / 2
mergeSort(left, mid, arr)
mergeSort(mid+1, right, arr)
mergeTwoSlice(left, mid, right, arr)
}
}
func test() {
arr := []int{
9, 8, 21, 2, 1}
// make 可以用于创建一个slice make([]int, n , len) 长度为 n ,cap为 len
s1 := make([]int, 1, 10)
// copy 是需要根据dest的大小(len而非cap大小)来进行复制
copy(s1, arr[3:5])
fmt.Println(len(s1), cap(s1), s1, s1)
}
func main() {
rand.Seed(999)
var arr []int
for i := 0; i < 10; i++ {
arr = append(arr, rand.Intn(100))
}
fmt.Println(arr)
//BubbleSort(arr)
//insertSort(arr)
//QuickSort(0, len(arr)-1, arr)
//mergeSort(0, 9, arr)
test()
fmt.Println(arr)
}
go练习排序算法
猜你喜欢
转载自blog.csdn.net/qq_44741914/article/details/132282758
今日推荐
周排行