1. 冒泡排序
1.1 算法步骤
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1.2 动图演示
1.3 代码实现
func BubbleSort(nums []int) []int {for i:=0;i<len(nums);i++ {for j:=0;j<len(nums)-1;j++ {if nums[j] > nums[j+1] {nums[j], nums[j+1] = nums[j+1], nums[j]}}}return nums
}
2. 选择排序
2.1 算法步骤
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
2.2 动图演示
2.3 代码实现
func selectionSort(arr []int) []int {for i := 0; i < len(arr)-1; i++ {min := ifor j := i + 1; j < len(arr); j++ {if arr[j] < arr[min] { // 寻找最小的数min = j // 将最小数的索引保存}}arr[i], arr[min] = arr[min], arr[i]}return arr
}
3. 插入排序
3.1 算法步骤
- 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
- 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面)
3.2 动图演示
3.3 代码实现
func insertionSort(arr []int) []int {var i, j intfor i = 1; i < len(arr); i++ {current := arr[i]for j = i - 1; j >= 0; j-- {if current < arr[j] {arr[j+1] = arr[j]} else {break}}arr[j+1] = current}return arr
}
原文地址:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html