常用排序
时间:2020-04-26
本文章向大家介绍常用排序,主要包括常用排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
冒泡排序
"""
# 稳定排序的定义:
假定在待排序的序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
# 冒泡排序是稳定的
### 时间复杂度:即程序运行的大概次数
#该时间复杂度 O(n^2)
def bubble_sort(li):
for i in range(len(li)-1): # 趟的次数,最后一趟就不用走了
flag = True
for j in range(len(li)-1-i): # 最后一个数不用比较,以及已经走了多少趟
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
flag = False
if flag:
return
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
bubble_sort(li)
print(li)
"""
选择排序
"""
# 不稳定排序
### 选择排序
# 时间复杂度:O(n^2)
def select_sort(li):
for i in range(len(li)):
minloc = i # 假设默认第一个是最小的
for j in range(i+1, len(li)):
if li[minloc] > li[j]:
li[minloc], li[j] = li[j], li[minloc]
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
select_sort(li)
print(li)
"""
插入排序
"""
# 稳定排序
### 插入排序
# 时间复杂度:O(n^2)
def insert_sort(li):
for i in range(1, len(li)):
temp = li[i] # i = 2 temp=li[2]=4
j = i - 1 # j = 1
while j >= 0 and li[j] > temp:
li[j+1] = li[j] #[[5,7,7,6,3,8,2,9,1]] ==> [5,5,7,6,3,8,2,9,1]
j = j - 1 # j = 0
li[j+1] = temp
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
insert_sort(li)
print(li)
"""
快排
"""
# 快排是不稳定的排序
#### 快排
# 时间复杂度是:O(nlogn)
def partition(li, left, right): # O(n)
temp = li[left]
while left < right:
while left < right and li[right] >= temp:
right = right - 1
li[left] = li[right] # 将大于小于归为中间数扔到前面去
while left < right and li[left] <= temp:
left = left + 1
li[right] = li[left]
li[left] = temp
return left # 把中间位置的返回出去
def quick_sort(li, left, right):
if left < right:
mid = partition(li, left, right) # 归为函数
quick_sort(li, left, mid-1) # O(logn)
quick_sort(li, mid+1, right)
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
quick_sort(li, 0, len(li)-1)
print(li)
"""
原文地址:https://www.cnblogs.com/yafeng666/p/12777646.html
- Ubuntu 16.04 安装VNC
- 使用Feign实现Form表单提交
- Ubuntu 16.04 Install OpenCV
- Spring Cloud各组件调优参数
- 手把手教你设置 IntelliJ IDEA 的彩色代码主题
- 实用技巧:Hystrix传播ThreadLocal对象(两种方案)
- OpenDaylight与Mininet应用实战之流表操作
- 使用Spring Cloud Feign上传文件
- 用 TensorFlow 让你的机器人唱首原创给你听
- Spring Cloud限流详解(附源码)
- 手动安装Docker 17.06
- 详述使用 IntelliJ IDEA 解决 jar 包冲突的问题
- Spring Cloud各组件重试总结
- js或者php浮点数运算产生多位小数的理解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小程序 - 如何自定义导航栏
- protobuf 语法 与 protocol-buffers 的使用
- 小程序 - 简单实现mixin功能
- 记录一些小技巧-CSS篇
- 记录一些小技巧-JS篇
- 初次在Vue项目使用TypeScript,需要做什么
- VScode - 10个提高工作效率的快捷键
- Vue - 自定义组件双向绑定
- 解决 [Element Warn][Form]model is required for validate to work!
- 编写TypeScript工具类型,你需要知道的知识
- 微信小程序8种数据通信的方式
- 前端手写代码原理实现
- JavaScript 进制转换&位运算,了解一下?
- 10个实用的工具函数
- 小程序scroll-view点击项自动居中