社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
各种快速排序算法 - Go语言中文社区
Toggle navigation
文章
(current)
Go面试题
热
Go导航
Go教程
官方文档
中文文档
标准库文档
Golang入门指南
Go话题
登录
注册
各种快速排序算法
算法
1.插入排序:
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序;首先将第一个作为已经排好序的,然后每次从后的取出插入到前面并排序;
时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:稳定
[python]
view plain
copy
def
insert_sort(ilist):
for
i
in
range(len(ilist)):
for
j
in
range(i):
if
ilist[i] < ilist[j]:
ilist.insert(j, ilist.pop(i))
break
return
ilist
ilist = insert_sort([
4
,
5
,
6
,
7
,
3
,
2
,
6
,
9
,
8
])
print
ilist
2.希尔排序:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
时间复杂度:O(n)
空间复杂度:O(n√n)
稳定性:不稳定
[python]
view plain
copy
def
shell_sort(slist):
gap = len(slist)
while
gap >
1
:
gap = gap //
2
for
i
in
range(gap, len(slist)):
for
j
in
range(i % gap, i, gap):
if
slist[i] < slist[j]:
slist[i], slist[j] = slist[j], slist[i]
return
slist
slist = shell_sort([
4
,
5
,
6
,
7
,
3
,
2
,
6
,
9
,
8
])
print
slist
3.
冒泡排序:
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成
时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:稳定
[python]
view plain
copy
def
bubble_sort(blist):
count = len(blist)
for
i
in
range(
0
, count):
for
j
in
range(i +
1
, count):
if
blist[i] > blist[j]:
blist[i], blist[j] = blist[j], blist[i]
return
blist
blist = bubble_sort([
4
,
5
,
6
,
7
,
3
,
2
,
6
,
9
,
8
])
print
blist
4.快速排序:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
时间复杂度:O(nlog₂n)
空间复杂度:O(nlog₂n)
稳定性:不稳定
[python]
view plain
copy
def
quick_sort(qlist):
if
qlist == []:
return
[]
else
:
qfirst = qlist[
0
]
qless = quick_sort([l
for
l
in
qlist[
1
:]
if
l < qfirst])
qmore = quick_sort([m
for
m
in
qlist[
1
:]
if
m >= qfirst])
return
qless + [qfirst] + qmore
qlist = quick_sort([
4
,
5
,
6
,
7
,
3
,
2
,
6
,
9
,
8
])
print
qlist
5.选择排序:
第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕
时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:不稳定
[python]
view plain
copy
def
select_sort(slist):
for
i
in
range(len(slist)):
x = i
for
j
in
range(i, len(slist)):
if
slist[j] < slist[x]:
x = j
slist[i], slist[x] = slist[x], slist[i]
return
slist
slist = select_sort([
4
,
5
,
6
,
7
,
3
,
2
,
6
,
9
,
8
])
print
slist
6.堆排序:
它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶
时间复杂度:O(nlog₂n)
空间复杂度:O(1)
稳定性:不稳定
[python]
view plain
copy
import
copy
def
heap_sort(hlist):
def
heap_adjust(parent):
child =
2
* parent +
1
# left child
while
child < len(heap):
if
child +
1
< len(heap):
if
heap[child +
1
] > heap[child]:
child +=
1
# right child
if
heap[parent] >= heap[child]:
break
heap[parent], heap[child] = heap[child], heap[parent]
parent, child = child,
2
* child +
1
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lmz_lmz/article/details/80641475
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
发表于 2020-03-01 23:12:56
阅读 ( 791 )
分类:
算法
0 推荐
收藏
你可能感兴趣的文章
数据挖掘十大经典算法(包括各自优缺点 / 适用数据场景)
1034 浏览
一文教你学习数据挖掘入门算法
931 浏览
算法图解--python
1154 浏览
《算法图解》-9动态规划 背包问题,行程最优化
1211 浏览
C数据结构与算法-基础整理-树-05:图解-树的后序遍历
1401 浏览
算法图解 -- 书评
1178 浏览
算法图解-动态规划
1088 浏览
《算法图解》-C8贪婪算法
983 浏览
Dijkstra算法-(迪杰斯特拉)算法的迭代实现与优先队列实现 图解算法过程
891 浏览
精选的优质文章
也许 Go 开发可以更简单!
10552 浏览
如何使用 Golang 日志监控你的应用程序?
12027 浏览
从Go语言实现模板设计模式浅谈Go的抽象能力
14085 浏览
阿里云基于 Go 的微服务架构分享
23943 浏览
java是否会被取代?Go会否给Java带来冲击?
28475 浏览
千万级规模高性能、高并发的网络架构经验分享
30022 浏览
阿里部分面试题汇总,对想进阿里的同学非常实用
62316 浏览
实用好文:知乎实时数仓架构实践及演进
31338 浏览
支撑马蜂窝「双11」营销大战背后的技术架构
228294 浏览
想进大厂?50个多线程面试题,你会多少?(一)
23073 浏览
0 条评论
请先
登录
后评论
官方社群
关注公众号
—— 加入社区微信群 ——
→
「Go语言教程」
领取
GO教程
1. Go语言简介
1.1 Go语言简介
1.2 Go语言的特性
1.3 Go语言为并发而生
1.4 哪些项目使用Go语言开发?
1.5 哪些大公司正在使用Go语言
1.6 Go语言的性能如何?
1.7 Go语言标准库强大
1.8 Go语言上手简单
1.9 Go语言代码风格清晰、简单
1.10 Go语言工程结构详述
1.11 第一个Go语言程序
1.12 Go语言历史版本
2. Go语言基本语法
2.1 Go语言变量的声明
2.2 Go语言变量的初始化
2.3 Go语言多个变量同时赋值
2.4 Go语言匿名变量
2.5 Go语言变量的作用域
2.6 Go语言整型(整数类型)
2.7 Go语言浮点类型(小数类型)
2.8 Go语言复数
2.9 Go语言bool类型(布尔类型)
2.10 Go语言字符串
2.11 Go语言字符类型(byte和rune)
2.12 Go语言数据类型转换
2.13 Go语言指针
2.14 Go语言变量的生命周期
2.15 Go语言常量
2.16 Go语言类型别名
2.17 Go语言关键字与标识符
2.18 Go语言运算符的优先级
3. Go语言数据结构
3.1 Go语言数组
3.2 Go语言多维数组
3.3 Go语言切片
3.4 使用append()为切片添加元素
3.5 Go语言切片复制
3.6 Go语言从切片中删除元素
3.7 Go语言range关键字
3.8 Go语言多维切片
3.9 Go语言map(映射)
3.10 Go语言遍历map
3.11 map元素的删除和清空
3.12 Go语言sync.Map
3.13 Go语言list(列表)
3.14 Go语言nil:空值/零值
4. Go语言流程控制
4.1 Go语言分支结构
4.2 Go语言循环结构
4.4 Go语言键值循环
4.5 Go语言switch语句
4.6 Go语言goto语句
4.7 Go语言break(跳出循环)
4.8 Go语言continue
5. Go语言函数
5.1 Go语言函数声明
5.2 Go语言函数变量
5.3 Go语言匿名函数
5.4 Go语言函数类型实现接口
5.5 Go语言闭包(Closure)
5.6 Go语言可变参数
5.7 Go语言defer(延迟执行语句)
5.8 Go语言递归函数
5.9 Go语言处理运行时错误
5.10 Go语言宕机(panic)
5.11 Go语言宕机恢复(recover)
5.12 Go语言计算函数执行时间
5.13 Go语言Test功能测试函数
6. Go语言结构体
6.1 Go语言结构体定义
6.2 Go语言实例化结构体
6.3 初始化结构体的成员变量
6.4 Go语言构造函数
6.5 类型内嵌和结构体内嵌
6.6 初始化内嵌结构体
6.7 内嵌结构体成员名字冲突
6.8 Go语言垃圾回收和SetFinalizer
6.9 Go语言链表操作
6.10 Go语言数据I/O对象及操作
7. Go语言接口
7.1 Go语言接口声明(定义)
7.2 Go语言实现接口的条件
7.3 Go语言类型与接口的关系
7.4 Go语言类型断言
7.5 Go语言排序
7.6 Go语言接口的嵌套组合
7.9 Go语言接口和类型之间的转换
7.10 Go语言空接口类型
7.11 Go语言类型分支
7.12 Go语言error接口
8. Go语言包
8.1 包的基本概念
8.2 Go语言封装简介及实现细节
8.3 Go语言GOPATH
8.4 Go语言常用内置包
8.5 Go语言自定义包
8.6 Go语言package
8.7 Go语言导出包中的标识符
8.8 Go语言import导入包
8.9 Go语言sync包与锁
8.10 Go语言big包
8.11 Go语言正则表达式:regexp包
8.12 Go语言time包:时间和日期
8.13 Go语言os包用法简述
8.14 Go语言flag包:命令行参数解析
8.15 Go语言go mod包依赖管理工具
8.16 Go语言runtime包:运行时
9. Go语言并发
9.1 Go语言并发简述
9.2 Go语言轻量级线程
9.3 Go语言并发通信
9.4 Go语言竞争状态
9.5 Go语言调整并发的运行性能
9.6 并发和并行的区别
9.7 goroutine和coroutine的区别
9.8 Go语言通道(chan)
9.9 示例:并发打印
9.10 Go语言单向通道
9.11 Go语言无缓冲的通道
9.12 Go语言带缓冲的通道
9.13 Go语言channel超时机制
9.14 Go语言多核并行化
9.15 互斥锁和读写互斥锁
9.16 Go语言等待组
9.17 死锁、活锁和饥饿概述
9.18 Go语言CSP:通信顺序进程简述
9.19 示例:聊天服务器
10. Go语言反射
10.1 Go语言反射(reflection)
10.2 Go语言反射规则浅析
10.3 通过反射获取类型信息
10.4 通过反射获取指针指向的元素类型
10.5 通过反射获取结构体的成员类型
10.6 Go语言结构体标签
10.7 通过反射获取值信息
10.8 通过反射访问结构体成员的值
10.9 判断反射值的空和有效性
10.10 通过反射修改变量的值
10.11 通过类型信息创建实例
10.12 通过反射调用函数
10.13 Go语言inject库:依赖注入
11. Go语言文件处理
11.1 Go语言自定义数据文件
11.2 Go语言JSON文件的读写操作
11.3 Go语言XML文件的读写操作
11.4 Go语言使用Gob传输数据
11.5 Go语言纯文本文件的读写操作
11.6 Go语言二进制文件的读写操作
11.7 Go语言自定义二进制文件的读写操作
11.8 Go语言zip归档文件的读写操作
11.9 Go语言tar归档文件的读写操作
11.10 Go语言使用buffer读取文件
11.11 Go语言文件的写入、追加、读取、复制操作
11.12 Go语言文件锁操作
12. Go语言编译和工具链
12.1 go build命令
12.2 go clean命令
12.3 go run命令
12.4 go fmt命令
12.5 go install命令
12.6 go get命令
12.7 go generate命令
12.8 go test命令
12.9 go pprof命令
13. Go语言进阶
13.1 Go语言的深拷贝和浅拷贝
13.2 Go语言引用传递和值传递
13.3 Go语言的Socket编程
14. 常见面试题
14.1 Golang Map底层实现
14.2 go语言触发异常的场景有哪些
14.3 Printf()、Sprintf()、Fprintf()函数的区别用法是什么
14.4 详细说说new和make的区别
14.5 详细说说切片和数组的区别
14.6 Golang的内存模型,为什么小对象多了会造成gc压力
14.7 Data Race问题怎么解决?能不能不加锁解决这个问题
14.8 在 range 迭代 slice 时,你怎么修改值的
14.9 select可以用于什么
14.10 go语言编程的好处是什么
14.11 你是否主动关闭过http连接,为啥要这样做
14.12 recover的执行时机
14.13 说出一个避免Goroutine泄露的措施
14.14 如何跳出for select 循环
14.15 如何初始化带嵌套结构的结构体
14.16 Printf()、Sprintf()、Fprintf()函数的区别用法是什么
14.17 go语言中的引用类型包含哪些
14.18 说说go语言的select机制
推荐文章
python3实现决策树算法
分类——决策树算法(Python3实现)
python机器学习实战——算法篇之决策树算法(学习的心路历程及学习路线适合小白)(下)
python3.5《机器学习实战》学习笔记(五):决策树算法实战之预测隐形眼镜类型
决策树算法——ID3算法(Python3实现)
收藏!90 个名企笔试题 + 算法题
算法第四版 pdf 下载
局部线性嵌入算法(LLE)与其Python实现
高维数据的快速最近邻算法FLANN
算法心得:高效算法的奥秘
猜你喜欢
随便看看
银河麒麟安装达梦数据库
ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘
网口扫盲三:以太网芯片MAC和PHY的关系
php中curl的参数详解
git diff 输出的含义, 如何撤销一个patch
【Webpack】npm run build 打包报错 Uglifyjsplugin of undefined
jQuery报错Uncaught TypeError: Cannot read property 'trim' of undefined
【vue踩坑记录】3、“Error in render: "TypeError: Cannot read property '0' of undefined"”渲染错误问题
vue中cannot read property of undefined的问题分析及解决
解决vue2.0路由 TypeError: Cannot read property 'matched' of undefined 的错误问题
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!