三类常见排序
问题:插入排序和冒泡排序都是O(n²),为什么插入排序更收欢迎?
答:冒泡排序每次需要3次赋值,而插入排序只需要一次,所以插入排序明显更快
如何在O(n)内找出一个无序数组的第k大的元素?
使用快速排序思想,每次看pivot是不是需要的第k大的元素,不是的话,缩小区间
如何分析一个排序算法
1.最好,最坏。平均时间复杂度
2.时间复杂度的系数,常数,低阶
3.比较次数和交换次数
4.算法的内存消耗
原地排序指的是空间复杂度是O(1)的排序算法
5.算法的稳定性
即,如果序列中存在相同的值,经过排序后,相等元素的原有先后顺序不变
稳定性在实际应用中很重要
冒泡排序(Bubble Sort)
def bubbleSort(nums):
flag=0
n=len(nums)
for i in range(n-1):
print(nums)
flag=0
for j in range(n-1-i):
if nums[j]>nums[j+1]:
tmp=nums[j]
nums[j]=nums[j+1]
nums[j+1]=tmp
flag=1
if not flag:
return nums
return nums
x=[5,4,3,1,2]
y=bubbleSort(x)<