Go实现常用的排序算法

一、插入排序

1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
点击查看代码
// 插入排序
func insertsort(arr []int) []int {
	//循环多少次,需要插入n-1个,从第二个开始插
	for i:=1; i<len(arr) ; i++ {

		num := arr[i]
		//j是已经排好需要,为什么是i-1,因为需要在已经排好的数据里面插入,要找到插入的位置
		j:=i-1

		//内嵌循环,如果比需要插入数据大就先往后排。
		for j>=0&&arr[j]>num {
			arr[j+1] = arr[j]
			j--

		}
		//插入
		arr[j+1] = num
	}
	return arr
}

二、冒泡排序

1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数。
3.核心就是需要冒泡n-1次,因为每次冒泡筛出一个最大值。
点击查看代码
func bubbleSort(arr []int) []int {
	//外嵌套循环次数为n-1
	n := len(arr)
	for i:=0;i<n-1;i++{
	//内嵌循环,进行两两对比,对比n-1-i次,因为
		for j:=0 ; j<n-1-i;j++ {
			if arr[j]>arr[j+1]{
			//交换位置
			arr[j],arr[j+1] = arr[j+1], arr[j]
			}
}
}
}

三。快速排序

1.不需要排的条件是数组为【】或者只有一个元素,这叫做基线条件。
2.选择一个基准元素provit,作为对数组分区的基准
3.将数组进行分区,比provit大的在right组,小的在left4.分治思想对左和右数组进行快速排序。
点击查看代码
func QuickSort(arr []int) []int {

	//基线条件
	n:=len(arr)
	if n<2 {
		return arr
	}
	//基准元素
	provit := arr[0]

	//分区
	var left, right []int
	for _,v := range arr[1:] {
		if v <=provit {
			left=append(left,v)
		}else {
			right = append(right, v)
		}
	}
	//快速排序
	left = QuickSort(left)
	right =QuickSort(right)

	return append(append(left,provit),right...)

}
posted @   云岛夜川川  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示