您的位置:首页 > 编程语言 > Go语言

golang实现常用排序算法

2016-02-26 13:32 459 查看
1.冒泡排序,算法复杂度O(n^2)
package main
import (
"fmt"
)
func main() {
var arr = []int{10, 17, 19, 18, 77, 55}
for i := 0; i < len(arr)-1; i++ {
for j := i + 1; j < len(arr); j++ {
if arr[i] > arr[j] {
arr[i], arr[j] = arr[j], arr[i]
}
}
}
fmt.Println(arr)
}
2.快速排序它的基本思想是:通过一趟排序将数据一分为二,其中一部分的所有数据都比另外一部分的所有数据都要小,然后对两部分递归,直至完成。时间复杂度介于O(nlogn)和O(n^2)一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]赋给A[j];5)重复第3、4步,直到i=j;
package main
import (
"fmt"
)
func main() {
quictSort()
}
func quictSort() {
var arr = []int{50, 66, 44, 99, 77, 24}
recurtion(arr, 0, len(arr)-1)
fmt.Println(arr)
}
func recurtion(arr []int, left int, right int) {
if left < right {
var i, j = left, right
var key = arr[i]
for i < j {
for i < j && arr[j] >= key {
j--
}
arr[i] = arr[j]
for i < j && arr[i] <= key {
i++
}
arr[j] = arr[i]
}
arr[i] = key
recurtion(arr, left, i-1)
recurtion(arr, i+1, right)
}
}
3.插入排序时间复杂度O(n^2),不适合大量数据处理从第二个值开始遍历,与前面的有序列比较,若比前面值小则交换
package main
import (
"fmt"
)
func main() {
insertSort()
}
func insertSort() {
var arr = []int{50, 66, 44, 99, 77, 24}
for i := 1; i < len(arr); i++ {
for j := 0; j < i; j++ {
if arr[i] < arr[j] {
arr[i], arr[j] = arr[j], arr[i]
}
}
}
fmt.Println(arr)
}
4.归并排序 算法复杂度O(nlogn)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
package mainimport "fmt"func main() {arr := []int{39, 19, 28, 6, 44, 77, 15}mergeSort(arr, 0, len(arr)-1)fmt.Println(arr)}func merge(arr []int, first, mid, last int) {buf := make([]int, last+1)i := firstj := mid + 1var num int = firstfor i <= mid && j <= last {if arr[i] < arr[j] {buf[num] = arr[i]i++} else {buf[num] = arr[j]j++}num++}for i <= mid {buf[num] = arr[i]num++i++}for j <= last {buf[num] = arr[j]num++j++}copy(arr[first:], buf[first:])}func mergeSort(arr []int, first, last int) {if first < last {mid := (first + last) / 2mergeSort(arr, first, mid)mergeSort(arr, mid+1, last)merge(arr, first, mid, last)}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: