递归知识、查找、冒泡排序知识

递归:(正常的递归表演满足下面两点)
1、调用自身

2、结束条件

Python中的列表查找:

输入:列表,待查找的元素

输出:返回下标,没有就返回None

顺序查找(线性查找):就是从列表的第一个元素查找到最后一个元素

代码实现:

 第一种:

第二种:

 时间复杂度:O(n)

二分查找(折半查找):

使用前提:必须是顺序列表(升序or降序)

简单讲解思路:
 根据左右下标指针首先算出中间下标对应的值,然后将该值与要查找的元素比较;

if该值大于查找元素,说明要在查找的元素在该值的左面;

所以要将右边的下标移到该值的左边一个,定义新的查找范围;

且每次的查找范围变为之前的一般,依次查找,直到查找到最后一个指针......

循环查找条件:

左右下标指针不能交叉,但是可以相等,指向最后一个元素。  left<=right

注意:
mid要写循环条件下,每次的mid要更新,根据mid下标对应列表的值与查找元素比较;

根据左右指针下标来调整mid的位置,进而调整。

时间复杂度:O(logn)

显然:
二分查找的效率要高于线性查找,前提是顺序列表之中。

排序:

定义:将无序的列表排成有序的列表

针对列表进行排序(主要是升降序)

输入:列表

输出:有序列表

Python内置函数sort()

常见的九大排序:
(冒泡、选择、插入)(快速、堆、归并)(希尔、计数、基数)

()从左往右依次牛批

先来看看low逼的冒泡排序:
冒泡排序的简单原理:

先分趟数,再分次数(分为有序区和无序区)

指针从第一个数一直指到无序区的最后一个数,这就叫一趟。

规律:每完成一趟,有序区就多一个数,无序区就少一个数。

注意:指针从第一个数依次完后走,不会停下!!!

例如:

3,4,5,2,1

第一趟:

  • 3,4,5,2,1
  • 3,4,5,2,1
  • 3,4,2,5,1

3,4,2,1,5 第一趟结束

第二趟:

  • 3,4,2,1,5
  • 3,2,4,1,5

3,2,1,4,5第二趟结束

第三趟:

  • 2,3,1,4,5

2,1,3,4,5第三趟结束

第四趟:
1,2,3,4,5

不难看出:

规律就是,假设列表长度是n=len(list)

趟数:n-1  每趟完成后有序区就多一个数(这里以升序为例)

每趟次数:n-1-有序区的数(或者理解为减去已经完成了多少趟?)

代码:

结果显示:

 思考改进:
假如我生成的列表一来就是升序呢?或者代码执行未完成前就已经有序呢?那还执行这么重复的工作是不是不太靠谱?

这里可以增加一个标志位

看看:

 这样是不是让效率更高,增加了一个校验,注意:是每一趟结束了校验的!!!

那冒泡排序的时间复杂度呢:
 时间复杂度:O(n^2)

代码关键点:
趟、无序区范围

希望大家看到这篇文章有所收获、后面陆续发出其他排序算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值