文章目录
排序
1)定义
将元素按照某种顺序排列的过程
2)算法好坏衡量指标
1)时间复杂度
将每一步操作看成基本计算单位,解决问题所需的步骤数.
“计算工作量”、“进本运算次数”
2)空间复杂度
执行算法所需要的存储空间,包括:输入数据所占空间、程序本身所占空间、算法执行过程需要的额外空间
这里,我们只考虑完成排序所需要的额外辅助空间
3)稳定性
对序列中两个相同的关键字:
若在初始序列和最终序列中的相对位置不发生变化,则称该排序是稳定的。
若在初始序列和最终序列中的相对位置发生改变,则称该排序时不稳定的。
4)总的比较次数 + 总的交换次数
1、冒泡排序
1)思路分析
多次遍历列表。比较相邻的两个元素,将不符合顺序的进行交换。每一轮便利都将下一个最大值放到正确的位置。
本质:不断消除列表的逆序
2)代码实现
def bubbleSort(alist):
for i in range(len(alist) - 1): # 外层循环表遍历了多少轮
for j in range(1, len(alist) - i): # 前面的元素两两比较交换
if alist[j-1] > alist[j]:
alist[j-1], alist[j] = alist[j-1], alist[j]
return alist
3)算法分析
1)是稳定排序
2)时间复杂度:O(n²)
3)空间复杂度:O(1)
2、选择排序
1)思路分析
依次找到当前列表中的最小(最大)元素,并将其添加到列表前面(后面)
2)代码实现
def selectSort(alist):
for i in range(len(alist) - 1): # 外层循环表示需要找最小元素需要多少轮
temp = i # temp记录当前数组最小值,初始化为当前列表第一个值
for j in range(i+1, len(alist)): # 找到当前这轮的最小元素
if alist[j] < alist[i]:
temp