![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go语言算法
徐婷鲜
这个作者很懒,什么都没留下…
展开
-
go语言实现计数排序
思想: 给出一串需要排序的数组,然后选出里面最大的数字,计算它有几位(个十百千位),然后对数组中其他的数字补零。 开辟一个大小为10的count数组,用于做记录位数上面0-9的数出现的次数(大于或等于当前下标的个数) 将原数组从后往前遍历,开辟一个辅助数组(help[])来存储新排序的元素,元素应存放在辅助数组中的位置的计算方式为:例如当前元素个位数(十位数)为4,则取count[4]中的数减一,就是当前元素应存放在辅助数组中的 位置,help[count[4]-1] = 当前元素,别忘记了co原创 2021-10-15 16:26:25 · 318 阅读 · 0 评论 -
go语言实现堆排序
堆排序思想: 1、将数组转换成满二叉树,并且满足大根堆规则(父节点为最大值,这里涉及到两元素交换位置),heaSize记录参与堆排序的节点个数(已经排好序的元素不包括其中)。 2、每次都将数组中 arr[0] 与 arr[heapSize-1] 进行换位,然后heapSize–,表示最大的数已经脱离了堆排序,因为已经有序。 3、将更换位置后的 arr[0] 与其孩子节点比较,孩子节点中最大的元素如果大于父节点,则父节点与孩子节点交换位置,直到没有孩子节点大于该元素。 4、数组元素 arr[0] 与 arr[原创 2021-10-14 10:49:49 · 277 阅读 · 0 评论 -
go语言实现快速排序
这是最近重新巩固的快速排序,快速排序1.0和2.0版本时间复杂度都是O(N²),快速排序3.0版本的时间复杂度为O(N*logN)。 快速排序思想:以数组的最后一个数为靶心,数组会分为三个区域(区域内不一定有序):大于靶心的放在右侧,小于靶心的放在左侧,等于靶心的放在中间(这里的分区域放置实现是使用交换的方式)。 快速排序3.0对靶心的选取是通过随机选取,并与数组的最后一位交换来作为靶心,所以是它与概率有关,每个数做靶心的机会都是随机的。 package main import ( "fmt" "ma原创 2021-10-12 16:59:48 · 212 阅读 · 0 评论