【算法笔记】排序
Page content
感觉现在越来越重视算法了。
因为我不是计算机专业的,所以对这些算法没怎么注意过。
这么高年龄的程序员居然才接触到这些算法,真是惭愧啊…^^;;
以下代码都是用golang写的,算是给自己看的笔记~
(1) 冒泡排序(Bubble Sort)
(2) 选择排序(Selection Sort)
(3) 插入排序(Insertion Sort)
(4) 希尔排序(Shell Sort)
(5) 归并排序(Merge Sort)
(6) 快速排序(Quick Sort)
(7) 基数排序(Radix Sort)
(8) 堆排序(Heap Sort)
◆ 冒泡排序(Bubble Sort)
图片备用地址
//泡沫排序
func BubbleSort() {
data := []int{8, 100, 99, 50, 22, 15, 16, 2, 99, 1000, 999, 1}
for i := 0; i < len(data); i++ {
for j := 0; j < len(data)-1-i; j++ {
if data[j] > data[j+1] {
v := data[j]
data[j] = data[j+1]
data[j+1] = v
}
}
}
fmt.Println(data)
}
◆ 选择排序(Selection Sort)
图片备用地址
//选择排序
func SelectionSort() {
data := []int{8, 100, 99, 50, 22, 15, 16, 2, 99, 1000, 999, 1}
var book int
for i := 0; i < len(data); i++ {
book = i
for j := i; j < len(data); j++ {
if data[book] > data[j] {
book = j
}
}
v := data[i]
data[i] = data[book]
data[book] = v
}
fmt.Println(data)
}
◆ 插入排序(Insertion Sort)
图片备用地址
//直接插入排序。因为我太不喜欢直接串改数组数据,所以写的有点像倒过来的冒泡排序
func InsertionSort() {
data := []int{8, 100, 99, 50, 22, 15, 16, 2, 99, 1000, 999, 1}
var v int
for i := 0; i < len(data); i++ {
for j := i; j > 0; j-- {
if data[j] < data[j-1] {
v = data[j]
data[j] = data[j-1]
data[j-1] = v
} else {
break
}
}
}
fmt.Println(data)
}
◆ 希尔排序(Shell Sort)
图片备用地址
//网上的优雅的写法
func ShellSort() {
data := []int{8, 100, 99, 50, 22, 15, 16, 2, 99, 1000, 999, 1}
for step := len(data) / 2; step > 0; step /= 2 {
//开始插入排序
for i := step; i < len(data); i++ {
//满足条件则插入
for j := i - step; j >= 0 && data[j+step] < data[j]; j -= step {
data[j], data[j+step] = data[j+step], data[j]
}
}
}
fmt.Println(data)
}
//我自己琢磨了半天才写出来的复杂版..ㅠㅠ
func ShellSort1() {
data := []int{8, 100, 99, 50, 22, 15, 16, 2, 99, 1000, 999, 1}
//先按照增量循环
for step := len(data) / 2; step > 0; step = step / 2 {
//每次增量的循环数
for i := 0; i < step; i++ {
//插入排序
for j := i; j < len(data); j = j + step {
for k := i; k < j; k = k + step {
if data[k] > data[j] {
v := data[j]
//为了插入往右挪数据
for l := j; l > k; l = l - step {
data[l] = data[l-step]
}
data[k] = v
}
}
}
}
}
fmt.Println(data)
}
◆ 归并排序(Merge Sort)
图片备用地址
未完待续
◆ 快速排序(Quick Sort)
图片备用地址
未完待续
◆ 基数排序(Radix Sort)
图片备用地址
◆ 堆排序(Heap Sort)
图片备用地址
未完待续
欢迎大家的意见和交流
email: li_mingxie@163.com