Toggle Navigation
首页
Golang
PHP
Laravel
Magento
Linux
数据库
MySQL
Redis
Mongodb
热门知识
程序与生活
架构师之路
静态站点
GitHub
主页
Golang实现经典算法
Golang实现经典算法
09-06
Mark
883
#### 冒泡排序: 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 ```golang func BubbleSort(data []int) []int { total := len(data) if total == 0 { return nil } for i := 0; i < total; i++ { for j := 0; j < total-i-1; j++ { if data[j] > data[j+1] { data[j+1], data[j] = data[j], data[j+1] } } } return data } ``` #### 快速排序: 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 ```golang func QuickSort(data []int) []int { total := len(data) if total == 0 { return nil } left := make([]int, 0) right := make([]int, 0) for i := 1; i < total; i++ { if data[i] < data[0] { left = append(left, data[i]) } else { right = append(right, data[i]) } } left = QuickSort(left) right = QuickSort(right) return arrayMerge(left, data[0], right) } func arrayMerge(left []int, key int, right []int) []int { result := make([]int, 0) result = append(result, left...) result = append(result, key) result = append(result, right...) return result } ``` #### 选择排序: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 ```golang func SelectSort(data []int) []int { total := len(data) if total == 0 { return nil } var min, minKey int for i := 0; i < total-1; i++ { min = data[i] minKey = i for j := i + 1; j < total; j++ { if min > data[j] { min = data[j] minKey = j } } data[i], data[minKey] = data[minKey], data[i] } return data } ``` #### 插入排序: 从第一个元素开始,该元素可以认为已经被排序,取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置,重复步骤3,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到下一位置中,重复步骤2。 ```golang func InsertSort(data []int) []int { total := len(data) if total == 0 { return nil } var key, pos int for i := 0; i < total; i++ { key = data[i] pos = i for pos > 0 && data[pos-1] > key { data[pos] = data[pos-1] pos = pos - 1 } data[pos] = key } return data } ```
最新文章
Golang内存问题处理
WebSocket详解
Gopher面试中的Coding(三)
Golang用os/signal包实现平滑重载配置文件
Nginx实现负载均衡的几种方式
Golang中子goroutine与主协程同步的四种实现
Dockerfile文件详解
Golang开发微信公众号
最热文章
Magento实现下载csv数据表格
1815
Laravel带有条件搜索的分页
1716
Magento上传文件、缩略图和导出CSV
1705
Magento添加Advanced Dataflow
1655
Golang开发微信公众号
1590
Magento后台添加rule规则
1560
Magento优化 – MySQL读写分离
1525
Magento常用模块分享
1419
热门标签
下载
laravel分页
上传
导出
Dataflow
微信公众号
rule
规则
读写分离
模块
shell
正则
Collection
binlog
命名空间
内存泄漏
处理
Git
string
解锁
锁表
composer
事务处理
函数
redis sentinel
time
架构
系统
package
读写
事务处理
缓存
日志分析
进阶
golang
表分割
schedule
fmt
事务
分布式锁
交叉编译
HTTPS
日志分割
Gopher面试
Dockerfile
channel
mongodb
git服务器
gogs
多数据库
重载配置
负载均衡
日志过滤
php
protobuf
发展方向
版本号
模型关系
goroutine
concat
json
mongodb
get
post
defer
panic
golang算法
docker
elasticsearch
算法
代码部署
rpc
redis
写文件
protobuf
主从配置
websocket
laravel
package
并发
量级
curl
生成插件
直接下载
数据类型
Shell
错误传递
grpc
成长
Go指针
参数
protobuf
队列
方法
Redis持久化
路上
风景
yum