概述
插入排序
将未排序的元素同已排序的元素从后往前比较,带排序元素:a,被比较元素:b,如果a<b则, swap(a,)
快速排序
每趟排序把基准值放到对的位置即左边的元素都比它小,右边的元素都比它大
冒泡排序
每一趟排序(包括多次两两比较和交换)找出余下的最大元素放在数组的最后,叫沉底排序更贴切。
选择排序
对未排序的元素找出最小的元素, 放到未排序数组的0号位置
希尔排序
插入排序的改进;插入排序比较移动的步长是1,希尔排序中改进该步长,从大缩小到1
堆排序
利用大顶堆的特点:根的值比左右子树都大
先构造大顶堆
交换堆的第一个元素和最后一个元素,使最大的元素放在数组的最后,再对前面的堆进行调整,重复该操作
归并排序
递归地合并两个有序数组 ,不断一分为二拆分数组,当左右数组长度为1时,开始排序并合并,之后对合并后的数组(已排序)继续归并排序,采用分而治之的思想
1. 冒泡排序
每一趟排序(包括多次两两比较和交换)找出余下的最大元素放在数组的最后,叫沉底排序更贴切
func swap(arr *[]int, i, j int) {
temp := (*arr)[i]
(*arr)[i] = (*arr)[j]
(*arr)[j] = temp
}
func bubble(nums []int) []int {
lgh := len(nums)
for i := 0; i < lgh-1; i++ {
for j := 0; j < lgh-i-1; j++ {
if nums[j] > nums[j+1] {
swap(&nums, j, j+1)
}
}
}
return nums
}
2.选择排序
- 时间复杂度 O(n^2),空间复杂度 O(1)
- 对未排序的元素找出最小的元素, 放到未排序数组的0号位置
func selectSort(nums []int) []int{
lgh:=len(nums)
for i:=0;i<lgh-1;i++{
for j:=i+1;j<lgh;j++{
<