

func bubbleSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
for e := len(arr) - 1; e > 0; e-- {
for i := 0; i < e; i++ {
if arr[i] > arr[i+1] {
Swap(arr, i, i+1) //交换元素
}
}
}
return arr
}
func Swap(arr []int, i, j int) []int {
temp := arr[j]
arr[j] = arr[i]
arr[i] = temp
return arr
}
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

func selectSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
for i := 0; i < len(arr); i++ {
var minIndex int = i
for j := i + 1; j < len(arr); j++ {
if arr[j] < arr[minIndex] {
minIndex = j
}
}
arr = Swap(arr, i, minIndex)
}
return arr
}
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

func insertSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
for i := 1; i < len(arr); i++ {
for j := i - 1; j >= 0; j-- {
if arr[j] > arr[j+1] {
Swap(arr, j, j+1)
}
}
}
return arr
}
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

//快速排序
func quickSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
middle := arr[0]
var left []int
var right []int
for i := 1; i < len(arr); i++ {
if arr[i] > middle {
right = append(right, arr[i])
} else {
left = append(left, arr[i])
}
}
middle_s := []int{middle}
left = quickSort(left)
right = quickSort(right)
arr = append(append(left, middle_s...), right...)
return arr
}