算法
原创大约 1 分钟
冒泡排序
思路: 比较相邻元素的大小,比较完的元素不再比较
arr := [8]int{1,3,2,7,4,5,9,10}
l := len(arr)
for i := 0;i<l;i++ {
for j:=i;j<l;j++ {
if arr[j]<arr[i] {
arr[j],arr[i] = arr[i],arr[j]
}
}
}
fmt.Println(arr)
// 结果
[1 2 3 4 5 7 9 10]
选择排序
思路: 先默认数组n第一个为最大值,然后从剩下的数组n-1元素中选出最小的值与之交换,继续重复,直到剩下最后一个
arr := [8]int{1,3,2,7,4,5,9,10}
l := len(arr)
for j:=0;j<l;j++ {
max := arr[j]
maxIndex := j
for i := j+1;i<l;i++ {
if max > arr[i] {
max = arr[i]
maxIndex = i
}
}
if maxIndex != j {
arr[j],arr[maxIndex] = arr[maxIndex],arr[j]
}
}
fmt.Println(arr)
// 结果
[1 2 3 4 5 7 9 10]
插入排序
// 插入排序
// 思路: 刚开始把数组n看成只含有一个元素有序数组和n-1个元素无序数组
func TestInsertSort(t *testing.T) {
arr := [9]int{1,3,2,7,4,5,9,10,0}
l := len(arr)
for i := 1;i<l;i++ {
val := arr[i]
index := i-1
for index >=0 && arr[index] > val {
arr[index+1] = arr[index]
index--
}
if index != i-1 {
arr[index+1] = val
}
}
t.Log(arr)
}
// 结果
[0 1 2 3 4 5 7 9 10]
快速排序