数据结构与算法之排序(冒泡,选择,插入)

为什么学习数据结构与算法:

计算机重要的几门课:

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 数据结构与算法之排序(冒泡,选择,插入)的更多相关文章

  1. python数据结构与算法第九天【选择排序】

    1.选择排序的原理 2.代码实现 def selection_sort(alist): n = len(alist) # 需要进行n-1次选择操作 for i in range(n-1): # 记录最 ...

  2. python数据结构与算法——桶排序

    桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: # 简单桶排序 从小到大 def ...

  3. Python 数据结构与算法——桶排序

    #简单的桶排序 def bucksort(A): bucks = dict() # 定义一个桶变量,类型为字典 for i in A: bucks.setdefault(i,[]) # 每个桶默认为空 ...

  4. Python数据结构与算法(排序)

    https://www.cnblogs.com/fwl8888/p/9315730.html

  5. 基本排序-冒泡/选择/插入(python)

    # -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print( ...

  6. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  7. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  8. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  9. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

随机推荐

  1. criteria用法

    Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如: Java代码   Criteria cri ...

  2. python HTTP 状态码

    404 Not Found 在HTTP请求的路径无法匹配任何RequestHandler类相对应的模式时返回404(Not Found)响应码. 400 Bad Request 如果你调用了一个没有默 ...

  3. 学习 primer 第8章 IO库 小结

    iostream处理控制台IO fstream处理命名文件IO stringstream完成内存string的IO 非常重要!!!!!!!!!!  ========================== ...

  4. scut 125. 笔芯回文

    https://scut.online/p/125 看数据量,这题可能是O(n^2)的dp 也可能是区间dp,但是区间dp一般复杂度是O(n^3),虽然也可以优化,但是比赛的时候那么多人“秒”了,应该 ...

  5. (转)通过MySQL复制线程SQL_Thread加快增量恢复binlog

    数据回档常常是使用全量备份+binlog增量实现的.而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题,因为恢复binlog速度十分慢,并且容易出错. 恢复binlog文件一般有两种方法: ...

  6. RDL 数值列排序

    [注意:RDL排序要删除组内的默认排序字段] 在SSRS中排序时,如果是数值列,默认为显示成以下,会按字母的顺序排序,但并不是我们想要的结果: 怎样达到我们要的效果,按数值排序: 1.进入页面,默认排 ...

  7. CQRS之旅——前言(翻译)

    探索CQRS和Event Sourcing 本项目聚焦在使用命令和查询分离模式和事件溯源(CQRS+Event Sourcing)构建一个具有高扩展,高可用和高维护性的应用程序. 本项目定位为一个学习 ...

  8. android模拟器创建时的PANIC: Could not open:错误的解决

    创建AVD之后,在启动时报如下错误,解决方法如下: 在环境变量中创建ANDROID_SDK_HOME=D:\Program Files (x86)\Android\android-sdk,后面的当然是 ...

  9. Oracle ERP Interface堵住--Request Running too long time,查找Request执行的Sql

    Request Running too long time 堵住了INV Manager 导致INV Interface Pending 很多笔资料 Review 发现Request 实际执行SQL ...

  10. 部署WebService服务碰到的一个小问题

    在部署WebService服务到IIS上之后,发现一直无法在浏览器访问到编写的asmx文件,一直提示404或403错误.提示当前访问的文件时脚本文件. 1.首先检查了在IIS上部署WebService ...