一个空列表附加三个元素
第0个和第1个比较,两种可能,大于小于,等于是打印谁都一样如果索引0大于索引1,就有两种情况
索引0大于索引2
或者索引0不大于索引2
这个语句块已经定义了哪个索引最大
上半部分是0和1比较剩下的部分
第二大分支0不大于1
nums是索引,打印出来即可
还要第二种方式
max可以可迭代对象,和多个参数
单个值不是可迭代对象,会报错
可迭代对象把所有元素遍历一遍,找出最大值
元组也可以迭代
第一手资料必须要查帮助文档
拿到值用remove方法,拿到索引用pop方法,但是这两种操作都是对原有列表的一种改动。能少做就少做
这样写,当你移除完,nums变成0 了
剩下一个元素就等于是max的
这种算法不推荐,因为用到了remove
但是这样max要把所有元素都遍历一遍,效率比较低
第三种用sort,就地修改,sorted是返回一个新的排序好的东西
这样相当于别人吧你的排序算法写好了,
排序算法是必考,第一个冒泡
插入排序,选择排序是必须会写的,需要现场能写的
是交换排序,两两比较大小,三个数,第0个和第一个,第一个和第二个,两两比较大小,然后交换位置
索引0和索引1,,索引1大就把索引1放右边,然后和2比较,依次类推,最大数放在最右边
第一趟拿1和8进行比较,,8和9进行比较,9不用动,9在8的右边,9和5进行比较,大数是9,9和5交换位置,下面就是9和6发生比较,9大,9和6互换位置,9和7比较,9大,互换位置,依次类推
这样大数一直跑到最右边,第一趟结束
找到第二大的数
每一次待排数据都要减少
左边是代排区域,无序区域,右边是有序区域
要把有序区域扩大,有序区都扩展了,列表也就完成了
都是两两比较
这两种写法选一个即可
肯定要两次循环,先搭一个基础架子
第几趟跟里面的元素个数有关
完成22比较就从0开始比较
还缺点东西,交换完了,再来一趟之后,外面循环是走大 趟,
里面的是待比较的数字是越来越少的,每次都应该减1个
第三次进来i=2
交换排序有很多
https://en.wikipedia.org/wiki/Bubble_sort
exchange sorts交换排序,
selection sorts选择排序
insertion sort 插入排序
常见的排序
文献领域来讲,第一语言就是英文
为了实现原有的算法,再原有列表外,开辟了一个临时的元素空间
这个和上面是等效的
但是其实下面也是要用到临时内存的,先封装成元组,然后拆开,分别赋值,空间复杂度一点没少
比较了36次,交换了25次
都需要比较,但是不进行交换,交换比较耗时
三种情况,下面的交换次数完全不一样,一种是正常乱序,一种是排好序的,一种是全部打乱的
交换的越多越浪费时间
第一趟把8和9交换,然会就没必要进行比较了,走那么多趟是白走
需要做个标记,标记是否有没有交换
每一趟进来就需要判定你有没有交换过
比较次数大大减少
面试题问你一定要告诉提前结束,在某一趟中,没有比较,就不循环比较 了
时间复杂度是oO(n2) 空间复杂度是O(1)**
两层循环都是跟N相关的所以也可以记成n2 **
这个版本必须会写