GO语言实现的排序算法(常用的五种)
1.插入排序
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
代码具体实现如下所示:
// 插入排序
func inputSort(arr []int) []int {
//遍历所有int数组中的数据
for i := 1; i < len(arr); i++ {
//从左侧开始进行比较,第一个数据不进行比较,从第二个数据开始,
num := arr[i]
//循环次数
j := i - 1
for j > 0 && arr[j] > num {
arr[j+1] = arr[j]
j--
}
arr[j+1] = num
}
return arr
}
2.冒泡排序
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数
3.针对所有的元素重复以上的步骤,除了最后一个
具体实现如下所示:
func bubbleSort2(arr []int) []int {
//遍历数组
for i := 0; i < len(arr); i++ {
//从第二个数据开始比较
for j := 1; j < len(arr)-1; j++ {
if arr[j] < arr[j-1] {
arr[j-1], arr[j] = arr[j], arr[j-1]
}
}
}
return arr
}
3.快速排序
1.从数列中挑出一个元素,称为基准
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆放在基准后面,相同的数可以在任意一边,这个称为分区操作
3.递归的把小于基准值元素的子数列和大于基准值元素的子数列排序
具体代码如下所示:
func quickSort(arr []int) []int {
//遍历数组
for i := 0; i < len(arr); i++ {
//拿出基准数
num := len(arr) / 2
for j := 0; j < len(arr)-1; j++ {
//比较基准数
if arr[j] < arr[num] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}
4.选择排序
1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾
3.重复第二步,直到所有元素均排序完毕
代码实现如下所示:
func selectionSort(arr []int) []int {
//遍历数组
for i := 0; i < len(arr); i++ {
minIndex := i
for j := i + 1; j < len(arr)-1; j++ {
if arr[j] < arr[minIndex] {
minIndex = j
}
}
arr[i], arr[minIndex] = arr[minIndex], arr[i]
}
return arr
}
5.归并排序
1.把长度为n的输入序列分成两个长度为n/2的子序列
2.对这两个子序列分别采用归并排序
3.将两个排序好的子序列合并成一个最终的排序序列
代码实现如下所示:
func mergeSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
//找到数组长度的一半
mid := len(arr) / 2
//从头开始赋值直到一半时结束
left := arr[:mid]
//从中间开始赋值,直到结束
right := arr[mid:]
left = mergeSort(left)
right = mergeSort(right)
return merge(left, right)
}
func merge(left, right []int) []int {
//创建一个数组
result := make([]int, 0, len(left)+len(right))
//初始化i,j
i, j := 0, 0
for i < len(left) && j < len(right) {
if left[i] < right[j] {
result = append(result, left[i])
i++
} else {
result = append(result, right[j])
j++
}
}
result = append(result, left[i:]...)
result = append(result, right[j:]...)
return result
}
如上是常用到的排序算法,后续的数据结构相关会逐步更新,如果有什么问题也可以私信,评论区看到了就会有回复哦