选择排序
package main
import (
"fmt"
)
func selectSort(array []int) []int {
for i := 0; i < len(array); i++ {
min := i
for j := i + 1; j < len(array); j++ {
if array[j] < array[min] {
min = j
}
}
tmp := array[i]
array[i] = array[min]
array[min] = tmp
}
return array
}
func main() {
arr := []int{2, 3, 42, 3, 234, 2, 32, 3234, 53, 6346, 89}
selectSort(arr)
for i := range arr {
fmt.Println(arr[i])
}
}
冒泡排序
package main
import "fmt"
func bubbleSort(arr []int) []int {
flag := true
for flag {
flag = false
for i := 0; i < len(arr)-1; i++ {
if arr[i+1] < arr[i] {
arr[i+1], arr[i] = arr[i], arr[i+1]
flag = true
}
}
}
return arr
}
func main() {
arr := []int{3, 3, 4, 54, 6, 75, 54}
bubbleSort(arr)
for i := range arr {
fmt.Println(arr[i])
}
}
插入排序
package main
import "fmt"
func InsertSort(array []int) []int {
if len(array) < 2 {
return array
}
for i := 1; i < len(array); i++ {
value := array[i]
j := i - 1
for ; j >= 0; j-- {
if array[j] > value {
array[j+1] = array[j]
} else {
break
}
}
array[j+1] = value
}
return array
}
func main() {
array := []int{5, 8, 6, 3, 9, 2, 1, 7}
InsertSort(array)
for i := range array {
fmt.Println(array[i])
}
}
希尔排序
package main
import "fmt"
func shellSort(arr []int) []int {
for d := int(len(arr) / 2); d > 0; d /= 2 {
for i := d; i < len(arr); i++ {
for j := i; j >= d && arr[j-d] > arr[j]; j -= d {
arr[j], arr[j-d] = arr[j-d], arr[j]
}
}
}
return arr
}
func main() {
array := []int{4, 5, 44, 35, 57, 53, 78, 65}
shellSort(array)
for i := range array {
fmt.Println(array[i])
}
}
归并排序
package main
import "fmt"
func merge(arr []int, left int, mid int, right int) {
var arr1 = make([]int, len(arr))
var l = left
var r = mid + 1
var temp = left
for l <= mid && r <= right {
if arr[l] < arr[r] {
arr1[temp] = arr[l]
l++
} else {
arr1[temp] = arr[r]
r++
}
temp++
}
for l <= mid {
arr1[temp] = arr[l]
temp++
l++
}
for r <= right {
arr1[temp] = arr[r]
temp++
r++
}
for i := left; i <= right; i++ {
arr[i] = arr1[i]
}
}
func mergeSort(arr []int, left int, right int) {
if right > left {
mid := (left + right) / 2
mergeSort(arr, left, mid)
mergeSort(arr, mid+1, right)
merge(arr, left, mid, right)
}
}
func main() {
array := []int{3, 5, 75, 34, 8, 31, 44, 76, 87, 25, 73, 11}
mergeSort(array, 0, len(array)-1)
fmt.Println(array)
}
快速排序
package main
import "fmt"
func quickSort(arr []int) {
l := len(arr)
if l < 2 {
return
}
left, right := 0, l-1
value := arr[left]
for left < right {
if arr[left+1] > value {
arr[left+1], arr[right] = arr[right], arr[left+1]
right--
} else if arr[left+1] < arr[left] {
arr[left], arr[left+1] = arr[left+1], arr[left]
left++
} else {
left++
}
}
quickSort(arr[:left])
quickSort(arr[left+1:])
}
func main() {
arr := []int{2, 3, 4, 5, 32, 2, 43, 2, 1, 56, 43, 6, 3, 4}
quickSort(arr)
fmt.Println(arr)
}
堆排序
package main
import "fmt"
func heapSortMax(arr []int, len int) []int {
if len < 2 {
return arr
}
depth := len/2 - 1
for i := depth; i >= 0; i-- {
topmax := i
leftchild := 2*i + 1
rightchild := 2*i + 2
if leftchild <= len-1 && arr[leftchild] > arr[topmax] {
topmax = leftchild
}
if rightchild <= len-1 && arr[rightchild] > arr[topmax] {
topmax = rightchild
}
if topmax != i {
arr[i], arr[topmax] = arr[topmax], arr[i]
}
}
return arr
}
func heapSort(arr []int) []int {
len := len(arr)
for i := 0; i < len; i++ {
lastlen := len - i
heapSortMax(arr, lastlen)
if i < len {
arr[0], arr[lastlen-1] = arr[lastlen-1], arr[0]
}
}
return arr
}
func main() {
arr := []int{1, 9, 2, 0, 6, 54, 34, 36, 33, 5, 34, 567, 8, 9, 68}
heapSort(arr)
fmt.Println(arr)
}