Go语言中文网 为您找到相关结果 29

golang中sort包用法

golang中也实现了排序算法的包sort包. sort包中实现了3种基本的排序算法:插入排序.快排和堆排序.和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用.所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据自动选择高效的排序算法。 type Interface type Interface interface { Len() int // Len 为集合内元素的总数 Less(i, j int) bool //如果index为i的元素小于index为j的元素...阅读全文

博文 2015-06-17 20:02:37 chenbaoke

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c+...阅读全文

博文 2014-10-24 11:38:53 陆仁贾

Go语言标准库堆(heap)封装及堆排序实现

Go语言的OOP,接口,接口的组合,基础库的函数及接口如何抽象设计, 这些东西在Go的Heap源码及演示例子处理中,都有很好的展示. 在"container/heap"中,它的接口是如下定义的: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } 我不太明白为啥是这样的设计,只好通过下面的方法来尝试了解. 1. 通过测试例子,了解使用方式. 2. 试图还原原始场景,即利用源码整合实现了一个原始的堆排序 然后通过这两者的对比,来慢慢体会. contain...阅读全文

博文 2015-06-17 23:00:36 xcltapestry

golang-mongodb范例

1 package main 2 3 import ( 4 "log" 5 6 "gopkg.in/mgo.v2" 7 "gopkg.in/mgo.v2/bson" 8 ) 9 10 type Address struct { 11 Address string 12 } 13 type Location struct { 14 Longitude float64 15 Latitude float64 16 } 17 18 type Person struct { 19 Id bson.ObjectId `bson:"_id"` 20 Name string 21 Age_Int int 22 Address []Address 23 Location Location 24 } 25 2...阅读全文

博文 2016-03-17 01:00:01 --xiaoyao--

使用golang学习算法(1)-排序

前言 终于感觉到算法的重要了。于是打算继续学习下。 其实算法跟语言没有啥关系,用啥语言都可以实现关键是思路,最近正好在学习golang。打算把算法的编写使用golang完成。 没有使用IDE,使用的是sublime2+ golang的插件,然后使用命令行进行编译。 开发效率也不低,也支持语言的自动补齐。 搭建环境【http://blog.csdn.net/freewebsys/article/details/17955255】 学习的参数书,使用《算法导论》,也就是敲敲书上的代码学习下。 1,插入排序 package main func InsertSort(a []int) { for j := 1; j < len(a); j++ { var key = a[j] var i = j -...阅读全文

博文 2014-11-14 10:00:03 xoxoxo

go语言的排序和搜索(转载)

http://studygolang.com/articles/1598 go语言的排序和搜索 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理...阅读全文

博文 2016-01-11 03:00:00 basque

算法代码实现之二分法查找,Golang(Go语言)实现

封装成函数: //二分法查找//切片s是升序的//k为待查找的整数//如果查到有就返回对应角标,//没有就返回-1func BinarySearch(s []int, k int) int { lo, hi := 0, len(s)-1 for lo <= hi { m := (lo + hi) >> 1 if s[m] < k { lo = m + 1 } else if s[m] > k { hi = m - 1 } else { return m } } return -1} 测试: s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}fmt.Println(BinarySearch(s, 6)) 输出: ...阅读全文

博文 2016-03-03 19:00:00 QQ245671051

【Go语言】基本类型排序和 slice 排序

Go 是通过 sort 包提供排序和搜索,因为 Go 暂时不支持泛型(将来也不好说支不支持),所以,Go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 引言 Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。 排序(接口)的三个要素: 待排序元素个数 n ; 第 i 和第 j 个元素的比较函数 cmp ; 第 i 和 第 j 个元素的交换 swap ; 乍一看条件 3 是多余的, c 和 c++ 都不提供 swap 。 c 的 qs...阅读全文

博文 2016-09-22 05:00:02 u010983881

算法代码实现之堆排序,Golang(Go语言)实现

封装成函数: //堆排序//s[0]不用,实际元素从角标1开始//父节点元素大于子节点元素//左子节点角标为2*k//右子节点角标为2*k+1//父节点角标为k/2func HeapSort(s []int) { N := len(s) - 1 //s[0]不用,实际元素数量和最后一个元素的角标都为N //构造堆 //如果给两个已构造好的堆添加一个共同父节点, //将新添加的节点作一次下沉将构造一个新堆, //由于叶子节点都可看作一个构造好的堆,所以 //可以从最后一个非叶子节点开始下沉,直至 //根节点,最后一个非叶子节点是最后一个叶子 //节点的父节点,角标为N/2 for k := N / 2; k >= 1; k-- { sink(s, k, N) } //下沉排序 for N > ...阅读全文

博文 2016-03-01 21:00:00 QQ245671051

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c+...阅读全文

博文 2015-07-27 13:00:01 nop4ss

快速排序----Go语言版

快速排序: 一:原理 快速排序使用的是分治算法思想,选择序列中的一个支点,把大于支点的元素放在右边,小于支点的元素放在左边(升序),之后以支点为划分点把序列划分成两个子序列,然后循环进行寻找支点,交换元素,划分子序列,直到序列已经排好序为止。 二:性能 最好时间复杂度为O(n); 最坏时间复杂度为O(n^2); (待排序序列为正序或逆序); 平均时间复杂度为O(nlog2n); (划分的子序列的长度相同) 三:代码详见:https://github.com/sunnybird/go/blob/master/quickSort.go 顺便吐槽一下,Go没有while真心不习惯。。。。。。。。。...阅读全文

博文 2015-02-27 11:00:11 u011522720

Golang学习(6)——sort包

Golang学习 - sort 包--------------------// 满足 Interface 接口的类型可以被本包的函数进行排序。type Interface interface { // Len 方法返回集合中的元素个数 Len() int // Less 方法报告索引 i 的元素是否比索引 j 的元素小 Less(i, j int) bool // Swap 方法交换索引 i 和 j 的两个元素的位置 Swap(i, j int)}// 对 data 进行排序(不保证相等元素的相对顺序不变)// data 默认为升序,执行 Reverse 后为降序。func Sort(data Interface)// 对 data 进行排序(保证相等元素的相对顺序不变)// data 默认...阅读全文

博文 2017-02-09 18:26:28 1160636144

PAT:05-1. List Components (25),Go语言解答

题目大概意思:给定一个有N个顶点和E个边的无向图,请分别用DFS和BFS遍历无向图。假定顶点编号为0到N-1,在遍历的时候总是从最小编号的顶点出发,在访问相邻结点的时候,按升序的方式访问。 For a given undirected graph with N vertices and E edges, pleaselist all the connected components by both DFS and BFS. Assume thatall the vertices are numbered from 0 to N-1. While searching,assume that we always start from the vertex with the smallestind...阅读全文

博文 2015-10-25 17:00:05 u013564276

堆排序(golang实现)

封装成函数: //堆排序 //s[0]不用,实际元素从角标1开始 //父节点元素大于子节点元素 //左子节点角标为2*k //右子节点角标为2*k+1 //父节点角标为k/2 func HeapSort(s []int) { N := len(s) - 1 //s[0]不用,实际元素数量和最后一个元素的角标都为N //构造堆 //如果给两个已构造好的堆添加一个共同父节点, //将新添加的节点作一次下沉将构造一个新堆, //由于叶子节点都可看作一个构造好的堆,所以 //可以从最后一个非叶子节点开始下沉,直至 //根节点,最后一个非叶子节点是最后一个叶子 //节点的父节点,角标为N/2 for k := N / 2; k >= 1; k-- { sink(s, k, N) } //下沉排序 fo...阅读全文

博文 2017-09-03 07:05:01 imroc

golang map输出排序

由于GoLang Map 内部存储是无序的,当需要按顺序获得map存储的key -value值时,应该对遍历出来的结果进行重新排序; 在go 1.8版本后,提供的slice sort 功能使排序更简单: package main import ( "fmt" "sort" ) func main() { m := map[string]int{ "something": 10, "yo": 20, "blah": 20, } type kv struct { Key string Value int } var ss []kv for k, v := range m { ss = append(ss, kv{k, v}) } sort.Slice(ss, func(i, j int) boo...阅读全文

博文 2018-06-07 15:30:02 dpf-10

二分法查找(golang实现)

封装成函数: //二分法查找 //切片s是升序的 //k为待查找的整数 //如果查到有就返回对应角标, //没有就返回-1 func BinarySearch(s []int, k int) int { lo, hi := 0, len(s)-1 for lo <= hi { m := (lo + hi) >> 1 if s[m] < k { lo = m + 1 } else if s[m] > k { hi = m - 1 } else { return m } } return -1 } 测试: s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} fmt.Println(BinarySearch(s, 6)) 输出: ...阅读全文

博文 2017-09-03 07:05:00 imroc

leetcode刷题记录Array篇(31~Next Permutation)

##31.Next Permutation 题目:Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order). The replacement must be in-place, do not allocate extra memory. 翻译:实现下一个排列,将数字重新排列成数字的下一...阅读全文

博文 2017-04-24 12:54:19 L千年老妖

Golang基础(二)-- map用法和本质

本文转自:https://www.cnblogs.com/demon89/p/7259724.html Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。 Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。 所以在golang中Map的遍历不像其他语言一样,它的输出是无序的 func traversal() { tmap := make(map[int]string) tmap[0] = "a" tmap[1] = "b" tmap[2] = "c" tmap[3] = "d" tmap[4] = "e" tmap[...阅读全文

博文 2018-08-22 19:35:12 魔改谢馒头

NSQ学习:实现有序的消息队列

NSQ是一个内存+磁盘型的消息中间件,它使用push流的方式源源不断把消息推送给客户端,并且为了使服务端更加简单、高效,NSQ并不提供有序的消息队列。因此,如果对消息有顺序要求,只有两种解决办法: 改用类似kafka之类的有序消息队列; 生产者和消费者达成一个协议,比如增加一个序列号或者时间戳来表示顺序。 本文要介绍的是第二种方法,下面就来简单用golang实现一个有序的NSQ顺序消息队列。 首先,使用go-nsq客户端写一个main函数,并且连接上nsqlookupd: func main() { cfg := nsq.NewConfig() cfg.LookupdPollInterval = time.Second customer, err := nsq.NewConsumer("te...阅读全文

博文 2019-06-11 23:32:41 imxyb

Go实战--golang中各种排序算法实现以及生成随机数

生命不止,继续 go go go !!! 排序,对于每种编程语言都是要面对的。这里跟大家一起分享golang实现一些排序算法,并且说明如何生成随机数。 当然,golang为我们提供了sort包,也提供了math/rand包,这就大大方便了我们。 还要说明一下,这里不会详细介绍各种排序算法的原理,如需探索自行Google。 sort package Package sort provides primitives for sorting slices and user-defined collections. golang中也实现了排序算法的包sort包. type Interface type Interface interface { Len() int // Len 为集合内元素的总数 ...阅读全文

博文 2017-07-20 04:01:08 wangshubo1989

用反射实现二维数组key-value排序

首先了解一下概念: 反射是用来检测存储在接口变量内部(值value,类型type) 的一种机制。在Golang的reflect反射包中,提供了两种类型(或者说两个方法)让我们可以很容易的访问接口变量内容,分别是reflect.ValueOf() 和 reflect.TypeOf(): reflect.TypeOf: 直接给我们想要的type类型,如float64、int、指针、struct 等类型 reflect.ValueOf:直接给我们想要的具体的值,如520具体数值,或者类似&{13 "Hy" 26} 结构体struct的值 具体用法清参考reflect包文档。 快速排序 O(nlog2 n) 最坏O(n^2) 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有...阅读全文

博文 2018-10-22 15:34:41 海雲_2d72

通过sort包的使用,理解golang接口的应用

在go语言的应用中,涉及到排序,通常使用sort包来实现,sort包中实现了3种基本的排序算法:插入排序,快排和堆排序,这里不打算探讨排序算法,而会通过使用sort包,来理解interface的应用。 sort.go type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with ind...阅读全文

博文 2017-12-18 12:04:43 Cedrus

《Go语言四十二章经》第二十九章 排序(sort)

《Go语言四十二章经》第二十九章 排序(sort) 作者:李骁 ## 29.1 sort包介绍 Go语言标准库sort包中实现了3种基本的排序算法:插入排序、快排和堆排序。和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用。所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据自动选择高效的排序算法。 ```go type Interface type Interface interface { Len() int // Len 为集合内元素的总数 Less(i, j...阅读全文

博文 2018-10-12 20:38:10 roteman

用反射实现二维数组key-value排序

首先了解一下概念: 反射是用来检测存储在接口变量内部(值value,类型type) 的一种机制。在Golang的reflect反射包中,提供了两种类型(或者说两个方法)让我们可以很容易的访问接口变量内容,分别是reflect.ValueOf() 和 reflect.TypeOf(): reflect.TypeOf: 直接给我们想要的type类型,如float64、int、指针、struct 等类型 reflect.ValueOf:直接给我们想要的具体的值,如520具体数值,或者类似&{13 "Hy" 26} 结构体struct的值 具体用法清参考reflect包文档。 快速排序 O(nlog2 n) 最坏O(n^2) 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有...阅读全文

博文 2018-10-22 13:34:39 海雲_2d72

golang按key值进行升序排序(ksort),对字符串进行sha1哈希

在对接PHP语言实现的签名的时候,看见对方用了ksort,由于golang里面对map的遍历是无序的,所以用golang实现了对map按key值进行升序排序: package main import ( "crypto/sha1" "encoding/hex" "fmt" "sort" "strconv" "time" ) func main() { timeStamp := time.Now().Unix() params := map[string]string{ "staff_name": "hhh", "client_id": "123", "staff_id": "114", "time": strconv.FormatInt(timeStamp, 10), "secret": "...阅读全文

博文 2019-04-01 18:34:42 Iris_Yzy

redis 入门笔记

redis 入门笔记 redis中文文档 [TOC] string (字符串) redis 是一个键值对的数据库,他的数据类型都是 key -> value 这样的类型。 就好比在python中的的dict类型,就好比java中的hashmap类型,和Golang中的map类型这种。 在redis的sting类型中value就是一个字符串。 重要 api api 参数 功能 时间复杂度 set key value 给一个key设置值 O(1) get key 获取一个key的值 O(1) del key 删除一个key-value O(1) incr key key自增1 O(1) decr key key自减1 O(1) incryby key k key增加k O(1) decrby k...阅读全文

博文 2019-04-19 11:34:44 _AlphaBaby_

Lite语言——从入门到放弃(一)

Lite 是我设计开发的一门编程语言,主要关注如何设计更简洁的语法,经过两年改进,现在只需要很少的代码量就可以表达现代编程语言的大部分逻辑,去掉了关键字设计。 目前仍在持续改进中,欢迎到 Github 提意见,走过路过别忘了点个 Star 。 github.com/kulics/lite 变量声明 在 Lite 中,变量声明的格式为 # id type # a int 是的,不需要关键字开头,只需要用空格分割,后面部分就是类型。 也不需要 ; 结尾,编译器会根据特定换行规则断句,除非想在一行内写多个语句,就可以加上 ;。 Lite 是一门强类型语言,大部分时候都需要明确的类型,但是有丰富的自动推导特性节省代码。 赋值 一句话带过。 # id = value # a = 0 声明时初始化 把前...阅读全文

博文 2019-07-21 22:02:36 kulics

【Golang语言】LeetCode1122. Relative Sort Array

给你两个数组,arr1 和 arr2, arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。https://leetcode-cn.com/problems/relative-sort-array 输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] 输出:[2,2,2,1,4,3,3,9,6,7,19] 题意:arr2给你自定义了一个数字大小顺序,将arr1里的数按照2中定义的规则拍一拍。 思路:统计1中的数字出现的次数,遍历2,依次取出1中的数,按照统计的...阅读全文

博文 2019-08-25 09:03:09 努力的C

Golang中的sort包

Golang的sort包 1.sort包中定义的排序 该包已经实现对[ ]int [ ]float64 [ ]string类型进行排序。 1)sort.Sort(data Interface) :进行排序(使用的是快排),默认为升序排序。 sort的这个快排不是简单的快排,它是已经被优化过的了,在排序对象长度大于12的时候,先进行局部的快排,在深度等于0时再进行堆排序,在长度小于12时先进行一轮步长为6的希尔排序,最后再进行插入排序。 2)Sort.Stable((data Interface):进行稳定排序 稳定排序将根据数据的长度使用sort包中定义的插入排序和归并排序(将两者结合使用)来对数据进行排序 3)IsSorted(data Interface) ...阅读全文