Toggle Navigation
首页
Golang
PHP
Laravel
Magento
Linux
数据库
MySQL
Redis
Mongodb
热门知识
程序与生活
架构师之路
静态站点
GitHub
主页
Golang实现经典算法
Golang实现经典算法
09-06
Mark
330
#### 冒泡排序: 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 ```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 } ```
最新文章
WebSocket详解
Gopher面试中的Coding(三)
Golang用os/signal包实现平滑重载配置文件
Nginx实现负载均衡的几种方式
Golang中子goroutine与主协程同步的四种实现
Dockerfile文件详解
Golang开发微信公众号
Centos yum学习
最热文章
Magento上传文件、缩略图和导出CSV
1112
Magento实现下载csv数据表格
1100
Magento优化 – MySQL读写分离
984
Magento后台添加rule规则
803
Laravel带有条件搜索的分页
753
10个实用的PHP正则表达式
673
Magento 建立自己的shell命令
659
删除MySQL binlog实操
647
热门标签
上传
导出
下载
读写分离
rule
规则
laravel分页
正则
shell
binlog
Collection
命名空间
解锁
锁表
处理
string
Git
读写
事务处理
模块
表分割
进阶
事务处理
架构
系统
缓存
日志分析
time
composer
函数
HTTPS
事务
分布式锁
mongodb
fmt
日志分割
redis sentinel
交叉编译
schedule
多数据库
git服务器
gogs
channel
package
golang
concat
json
版本号
发展方向
php
protobuf
日志过滤
算法
docker
elasticsearch
defer
panic
get
post
写文件
模型关系
redis
rpc
主从配置
package
curl
Shell
golang算法
laravel
Dataflow
生成插件
直接下载
mongodb
参数
代码部署
protobuf
并发
量级
数据类型
错误传递
队列
Go指针
微信公众号
成长
路上
风景
方法
grpc
Dockerfile
Redis持久化
protobuf
yum
goroutine
重载配置
Gopher面试
负载均衡
websocket