
算法
主要介绍是算法
TimChen666
持续学习的渣渣
展开
-
3. 基础查找算法——哈希表查找(golang)
哈希表查找根据哈希算法填充数据,然后查找的时候首先计算哈希位置,然后对其位置的数据进行查找。const ( // 数据已经被删除 Deleted = iota // 哈希表的大小 MintableSize = 100 // 已经存在的合法数据 legimate = iota // 数据为空 Empty = iota)// 哈希函数(自定义的,不可靠)func MySHA(str interface{}, tableSize int) int { hashvar :.原创 2020-11-10 23:05:38 · 682 阅读 · 0 评论 -
2. Golang优先队列(基于堆排序实现)
优先队列既然是优先队列,那么我们首先就需要给数据进行排序,这里最适合的排序方法就是堆排序。排完序以后,就可以从队列里面取出想要的值。// 最大堆、最小堆// 接口实现比大小type Item interface { Less(than Item) bool}type Int intfunc (x Int) Less(than Item) bool { return x < than.(Int)}// 最小堆type Heap struct { // 数据 da.原创 2020-11-10 22:40:29 · 1500 阅读 · 0 评论 -
2. 基础查找算法——三分查找法(golang)
三分查找法三分查找法的核心思想关键词:两个枢轴三分查找法和二分查找法相比,只是多了一个枢轴。代码实现func ThirdSearch(arr []int, data int) int { low := 0 high := len(arr) - 1 i := 0 //循环的终止条件 for low <= high { i++ fmt.Println("第", i, "次") // 初始化枢轴 mid1 := low + int((high-low)/3).原创 2020-11-10 21:41:39 · 622 阅读 · 0 评论 -
12. 进阶排序算法——木桶排序(golang)
木桶排序木桶排序的核心思想关键词:分桶将数组分到有限数量的桶子里,每个桶子再个别排序。其实木桶排序和基数排序很相似,区别在于基数排序需要多趟桶排序,并且记录当前排序的结果。代码实现// 获取数组最大值func SelectSortMax(arr []int) (max int, err error) { // 数组长度 length := len(arr) // 空数组 if length == 0 { //err = errors.New("空数组") retu.原创 2020-11-10 21:37:03 · 524 阅读 · 0 评论 -
11. 进阶排序算法——地精排序(golang)
地精排序地精排序的核心思想关键词: 冒泡、插入地精排序适合大部分数据为有序 的情况,在数据有序时不做交换,在数据乱序时先进行冒泡排序,然后再进行插入排序。func GnomeSort(arr []int) []int { i := 1 for i < len(arr) { if arr[i] >= arr[i-1] { // 符合顺序,继续前进 i++ } else { // 不符合顺序,交换 arr[i], arr[i-1] = arr[i.原创 2020-11-09 23:37:26 · 214 阅读 · 0 评论 -
2. 基础查找算法——插值查找(golang)
插值查找插值查找的核心思想关键词: 插值在前面的二分查找法里,中间值是简单的(low+high) / 2。假设你在英文字典查找单词apple,你会怎么查呢?很显然你不会从中间开始查找,而是有目的地往前或者往后去翻。也就是说,枢轴不应该是绝对的中间值,而是应该根据查找值与最大最小值的关系去确认枢轴。插值公式:mid := (low + high) / 2mid = low + (high - low) * 1/2假设data位于中间值与high之间,则:mid = low + (h.原创 2020-11-09 22:59:26 · 534 阅读 · 0 评论 -
1. 基础查找算法——二分查找法(golang)
二分查找法二分查找法的核心思想关键词: 等分首先需要对数据进行排序,然后将数据进行等分,接着对比中间值来判断数据处于哪个区间,不停地进行缩小范围查找数据。代码实现func BinarySearch(arr []int, data int) int { low := 0 high := len(arr) - 1 i := 0 //循环的终止条件 for low <= high { i++ fmt.Println("第", i, "次") // 初始化枢轴 m.原创 2020-11-08 18:55:27 · 494 阅读 · 0 评论 -
9. 进阶排序算法——鸡尾酒排序(golang)
鸡尾酒排序鸡尾酒排序核心思想关键词: 正向、反向、排序鸡尾酒其实就是循环,正向、反向分别做冒泡排序。代码实现func CocktailSort(arr []int) []int { // 数组长度 length := len(arr) if length <= 1 { return arr } // 遍历 for i := 0; i < length-1; i++ { flag := false // 正向冒泡 if i%2 == 0 { .原创 2020-11-08 16:44:41 · 187 阅读 · 0 评论 -
8. 进阶排序算法——基数排序(golang)
基数排序基数排序核心思想关键词: 分级分别对个位数、十位数、百位数…上面的数字分级排序。举个例子:3、38、11、659、162先按照个位数排序,变成11、162、3、38、659。再按照十位数排序,变成3、11、38、659、162。最后按照百分数排序,变成3、11、38、162、659。代码实现func RadixSort(arr []int) []int { // 最大值,确定数量级 max, _ := selectSort.SelectSortMax(arr) /.原创 2020-11-08 16:31:36 · 503 阅读 · 0 评论 -
7. 进阶排序算法——奇偶排序(golang)
奇偶排序奇偶排序的思想核心关键词:奇数 、偶数、冒泡奇偶排序其实就是循环,将奇数、偶数分别做冒泡排序。代码实现func OddEvenSort(arr []int) []int { length := len(arr) // 标记 isSorted := false for isSorted == false { isSorted = true // 从奇数位开始交换 for i := 1; i < length-1; i = i + 2 { if .原创 2020-11-08 15:26:39 · 305 阅读 · 0 评论 -
6. 进阶排序算法——归并排序(golang)
归并排序归并排序的思想核心关键词:分组、合并首先将很长的序列进行分组,然后对其进行排序,然后将相邻的分组合并…如此重复,直至得到一个有序序列。递归版本代码实现func MergeSort(arr []int) []int { // 数组长度 length := len(arr) // 数组为空或者数组只有一个元素 if length <= 1 { retu...原创 2020-04-03 17:12:23 · 300 阅读 · 0 评论 -
5. 进阶排序算法——堆排序(golang)
前言由于博主目前还没有系统学习到二叉树相关的知识,所以有关完全二叉树的概念尽量不会提到。下文会尝试用最最简单,最容易理解的方式进行描述。堆排序的思想核心前面提到的基础排序算法,他们都有一个缺点,没有把每一次的比较结果保存下来,这就导致了后续会进行重复的比较工作。工作流程:构建一个堆的结构;找到堆内最大或者最小值,将其移走;剩余的元素又组成一个新的堆。循环往复...原创 2020-04-03 15:06:02 · 312 阅读 · 0 评论 -
4. 进阶排序算法——希尔排序(golang)
希尔排序前言插入排序在某些情况下,效率是很高的。比如我们的记录本身就是基本有序的,只需要少量的插入操作。再比如,记录少的时候,插入排序效率的优势也是很明显的。可是现实中,哪有那么理想的情况啊[>_<]没有环境,那我们就要自己创造啊!!!基本有序:所谓的基本有序就是小的关键字在前面,大的基本在后面,不大不小的基本在中间。希尔排序的思想核心关键词: 步长、分...原创 2020-04-03 11:54:38 · 513 阅读 · 0 评论 -
3. 基础排序算法——插入排序(golang)
插入排序插入排序的基本操作就是将一个记录插入到有效表中。代码实现package insertSortfunc InsertSort(arr []int) []int { // 数组长度 length := len(arr) // 数组为空或者数组只有一个元素 if length <= 1 { return arr } for i := 1; i < ...原创 2020-04-03 00:58:52 · 208 阅读 · 0 评论 -
2. 基础排序算法——选择排序(golang)
选择排序和冒泡排序相比,选择排序先是通过和比较,从而找到最小值的索引,最后进行交换。重复上述过程,最后便能得到有序的数组。代码实现func SelectSort(arr []int) []int { // 数组长度 length := len(arr) // 数组为空或者只有一个元素 if length <= 1 { return arr } // 遍历,比...原创 2020-04-03 00:43:42 · 177 阅读 · 0 评论 -
1. 基础排序算法——冒泡排序(golang)
冒泡排序冒泡排序是一种交换排序,它的基本思想是相邻的元素进行比较交换。代码实现package bubbleSortimport ( "errors" "fmt")// 冒泡排序找最大func BubbleFindMax(arr []int) (max int, err error) { // 数组长度 length := len(arr) // 空数组 if ...原创 2020-04-03 00:30:26 · 212 阅读 · 0 评论