python 数据结构与算法之排序(冒泡,选择,插入)
数据结构与算法之排序(冒泡,选择,插入)
为什么学习数据结构与算法:
计算机重要的几门课:
1.数据结构和算法
2.网络
3.操作系统
4.计算组成原理
数据结构与算法:
算法:
衡量算法的标准:
时间复杂度:就是程序代码执行的大概次数
小结:
时间复杂度是用来估计算法运行时间的一个式子(单位)
一般来说,时间复杂度高的算法比复杂度低的算法慢
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)< O(n^2logn)< O(n^3)
不常见的时间复杂度(看看就好)
O(n!) O(2^n) O(n^n) ....
如何一眼判断时间复杂度
1.循环减半的过程 --> O(logn) 比如二分查找
2.几次循环就是n的几次方的复杂度
空间复杂度:用来评价算法内存占用大小的一个式子
空间换时间
二分查找: 用到递归法
def binarySearch(lis,low,high,val):
if low < high:
mid = (low+high)//2
if lis[mid] == val:
return mid
elif lis[mid] > val:
binarySearch(lis,low,mid,val)
elif lis[mid] < val:
binarySearch(lis,mid+1,high,val)
else:
return -1
数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:
Data_Structure=(D,R)
其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。
冒泡排序法
冒泡排序法就是: 首先每两个相邻的数,如果前边的比后边的大,那么交换这两个数,每一次都会把最大的数往后排
# 冒泡排序法
# 生成10个在34内的随机数,然后进行排序
import random
lis = list()
for i in range(10):
a = random.randint(1, 34)
lis.append(a)
# print(lis)
# 时间复杂度 O(n^2)
def BubbleSort(lis):
for i in range(len(lis)):
flag = False # 当接收到已经排过序,就无需再多来几次后面的循环
for j in range(len(lis)-i-1):
if lis[j] > lis[j+1]:
lis[j], lis[j+1] = lis[j+1], lis[j]
flag = True
if not flag:
return
BubbleSort(lis)
print(lis)
选择排序法
选择排序法就是:
- 一趟遍历记录最小的数放到第一个位置
- 再一趟遍历记录剩余列表中最小的 数,继续放置
# 选择排序法
# 就是把最小的数往前排
# 时间复杂度 O(n^2)
def SelectSort(lis):
for i in range(len(lis)):
for j in range(i+1, len(lis)):
if lis[j] < lis[i]:
lis[j], lis[i] = lis[i], lis[j]
SelectSort(lis)
print(lis)
插入排序法
插入排序法就是:
- 列表被分为有序区和无序区两个部分,最初有序区只有一个元素
- 每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空
# 插入排序法
# 时间复杂度 O(n^2)
def insertsort(lis):
# 默认第一个数在有序区,从第二个开始找
for i in range(1, len(lis)):
j = i-1
while j >= 0 and lis[j] > lis[j+1]:
lis[j], lis[j+1] = lis[j+1], lis[j]
j -= 1
insertsort(lis)
print(lis)
# 我觉得插入排序还可以用for循环
# 时间复杂度 O(n^2)
def insertsort1(lis):
for i in range(1,len(lis)):
for j in range(i):
if lis[j]>lis[i]:
lis[i],lis[j]=lis[j],lis[i]
insertsort1(lis)
print(lis)
这些是比较常见的排序
python 数据结构与算法之排序(冒泡,选择,插入)的更多相关文章
- python数据结构与算法第九天【选择排序】
1.选择排序的原理 2.代码实现 def selection_sort(alist): n = len(alist) # 需要进行n-1次选择操作 for i in range(n-1): # 记录最 ...
- python数据结构与算法——桶排序
桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: # 简单桶排序 从小到大 def ...
- Python 数据结构与算法——桶排序
#简单的桶排序 def bucksort(A): bucks = dict() # 定义一个桶变量,类型为字典 for i in A: bucks.setdefault(i,[]) # 每个桶默认为空 ...
- Python数据结构与算法(排序)
https://www.cnblogs.com/fwl8888/p/9315730.html
- 基本排序-冒泡/选择/插入(python)
# -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print( ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
随机推荐
- HDU-1068-GirlsandBoys(最大独立集,二分图匹配)
链接:https://vjudge.net/problem/HDU-1068#author=0 题意: 学校对n个学生(男女都有)进行的调查了,发现了某些学生暗生情愫,现在需要你选出一个最大的集合,这 ...
- CoreCLR源码2
CoreCLR源码 前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到ne ...
- 045 Jump Game II 跳跃游戏 II
给定一个非负整数数组,你最初位于数组的首位.数组中的每个元素表示你在该位置的最大跳跃长度.你的目标是用最小跳跃次数到达最后一个索引.例如: 给定一个数组 A = [2,3,1,1,4]跳到最后一个索引 ...
- swift3.0 项目引导页
项目引导页并不难,使用 UICollectionView就可以完成, 1.首先获取应用程序的版本号,并存入本地,每次有新版本号,和存入本地的版本号,相比较 fileprivate func setup ...
- Spring事务的5种隔离级别
概述:isolation设定事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据. 定义的5个不同的事务隔离级别: DEFAULT:默认的隔离级别,使用数据库默认的事务隔离级别 ...
- 文件操作函数及光标,tell,truncate
一丶文件基本操作 1.打开文件 open(文件名(路径),mode = "?",encoding = "字符集") 2.文件路径: 1.绝对路径,从磁盘的根目录 ...
- iOS-Swift相比Objective-C有哪些优缺点
Swift,是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.它是一款易学易用的编程语言,而且 ...
- [LoadRunner]录制启动时报“The JVM could not be started……”错误解决方案
在LR准备点击录制java over http协议时,程序报如下错误: 报错提示是设置的JVM值设置问题,导致不能启动. 解决方案一 点击F4快捷按钮,会弹出以下界面,在选中的位置选择对应的java路 ...
- 如何提高Mysql的查询效率???
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- JavaScript_2_实现
1. HTML中的脚本必须位于<script>与</script>标签之间 JavaScript是所有现代浏览器以及HTML5中的默认脚本语言 2. 脚本可被放置在HTML页面 ...