东阳的学习记录,坚持就是胜利
所谓交换,是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法有很多,这里介绍冒泡排序和快速排序(重点)
冒泡排序
def buttle_sort(alist):
l = len(alist)
for i in range(l):
flag = False
j = l - 1
while j > i:
if alist[j - 1] > alist[j]:
alist[j - 1], alist[j] = alist[j], alist[j - 1]
flag = True
j -= 1
if flag == False:
return
算法分析
- 时间复杂度:最好O(n), 平均O(n2), 最差O(n2)
- 空间复杂度:O(1)
- 稳定
- 顺序/链式
快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
每趟决定一个元素的最终位置
def patation(alist, low, high):
pivot = alist[low]
while low < high:
while alist[high] >= pivot and low < high:
high -= 1
# 找到右边比pivot小的将其交换到左边
alist[low] = alist[high]
while alist[low] <= pivot and low < high:
low += 1
# 找到左边比pivot大的将其换到右边
alist[high] = alist[low]
alist[low] = pivot
return low
def quick_sort(alist, low, high):
mid = patation(alist, low, high)
patation(alist, low, mid-1)
patation(alist, mid+1, high)
算法分析
- 时间复杂度:最好:O(nlogn), 平均:O(nlogn),最差O(n**2)
- 空间复杂度:O(logn)
- 不稳定
- 顺序/链式