排序算法
2021-01-07 00:29
标签:i++ str 排序 sele return shel break turn port 排序算法 标签:i++ str 排序 sele return shel break turn port 原文地址:https://www.cnblogs.com/NjY2/p/12972883.htmlpackage main
import (
"fmt"
"strconv"
)
func main() {
arr := []int{12, 34, 651, 3, 65, 1, 4}
fmt.Println(arr)
// 冒泡排序
// value := bubble_sort(arr)
// 选择排序
// value := selection_sort(arr)
// 插入排序
// value := insertion_sort(arr)
// 快速排序
// value := quick_sort(arr)
// 归并排序
// value := merge_sort(arr)
// 希尔排序
// value := shell_sort(arr)
// 计数排序
// value := count_sort(arr)
// 桶排序
// 基数排序
value := radix_sort(arr)
fmt.Println(value)
}
// 冒泡排序
func bubble_sort(arr []int) []int {
len := len(arr)
for i := 0; i arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}
// 选择排序
func selection_sort(arr []int) []int {
len := len(arr)
for i := 0; i arr[j] {
arr[i], arr[j] = arr[j], arr[i]
}
}
}
return arr
}
// 插入排序
func insertion_sort(arr []int) []int {
len := len(arr)
// fmt.Println(len)
for i := 1; i = arr[j] {
break
}
arr[j+1] = arr[j]
j = j - 1
if j 0 && len(right) > 0 {
if left[0] > right[0] {
res = append(res, right[0])
right = right[1:]
} else {
res = append(res, left[0])
left = left[1:]
}
}
for len(left) > 0 {
res = append(res, left[0])
left = left[1:]
}
for len(right) > 0 {
res = append(res, right[0])
right = right[1:]
}
return res
}
// 希尔排序
func shell_sort(arr []int) []int {
len := len(arr)
f := 3
h := 1
for h = 1 {
// fmt.Println("h = ", h)
for i := h; i = h; j -= h {
// fmt.Println("j = ", j)
if arr[j] max {
max = arr[i]
}
}
res := make([]int, max+1)
// fmt.Println(res)
for _, v := range arr {
res[v] = res[v] + 1
}
NewArr := make([]int, 0)
for k, v := range res {
for i := 0; i i {
k := strV[lenV-i-1 : lenV-i]
key, _ := strconv.Atoi(k)
kl[key] = append(kl[key], v)
} else {
kl[0] = append(kl[0], v)
}
}
// fmt.Println(kl)
arr = arr[0:0]
for k, v := range kl {
arr = append(arr, v...)
kl[k] = kl[k][0:0]
}
}
return arr
}
上一篇:Java中方法的重载与重写