golang实现3种基本排序(选择排序,冒泡排序,插入排序)及稳定性和复杂度分析

package main

import "fmt"
//遍历数组,把这个数组分为一个已经排序的空间,一个分为没排序的空间
//最好时间复杂度为o(n) 最坏为n的平方
//平均复杂度为n的平方,它是一个稳定的排序算法
func charusort (arr []int) []int {

	if len(arr) <=1 {
		return arr
	}
	for i :=1 ; i < len(arr) ; i++ {
		a := arr[i]
		j :=i - 1
		for ; j >= 0 ; j -- {
           if arr[j] > a {
           	arr[j+1] = arr[j]
		   }else{
		   	break
		   }
		}

	}
	return arr


}

//每一次遍历整个数组,然后22进行比较,知道把找到的最大的值直接给最后的位置
//它是一个稳定的排序算法
//最好时间复杂度为o(n) 最坏为n的平方,平均复杂度为n的平方
func maopaosort (arr []int) []int {

	if len(arr) <=1 {
		return arr
	}
	for i:=0 ; i < len(arr) ; i++ {
		for j :=0 ; j <len(arr) - i - 1; j++{
			if arr[j] > arr[j+1]{
				arr[j],arr[j+1] =arr[j+1],arr[j]
			}
		}

	}
	return arr

}

func xuanzesort(arr []int) []int {
	//将数组分为已排序和未排序,在未排序中找到最小值,然后放入排序中
	//它不是一个稳定的排序算法
	//最好时间复杂度为n的平方 最坏为n的平方,平均复杂度为n的平方
	if len(arr) <=1 {
		return arr
	}
	for i:=0 ; i < len(arr) - 1 ; i++ {
		j := i
		min :=i
		//找到最小值
		for  ;  j < len(arr) ; j++ {
			if arr[j] < arr[min]{
				min = j
			}
		}
		arr[i],arr[min] =arr[min],arr[i]
	}
	return arr


}
func main() {

	aa:=[]int{1,2,5,3,4}
	xuanzesort(aa)
	fmt.Println(aa)


}

如果有地方没有讲解明白或者是出现错误,欢迎指正,下一篇介绍基本排序的其他种类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值