排序算法的稳定性:
排序前后,子的序列和原有的顺序相同的就是稳定的,不同则是不稳定的.
冒泡排序:
第一次交换过程示例图:
代码实现:
def bubble_sort(a_list):
'''冒泡排序'''
n = len(a_list)
for j in range(n-1):
for i in range(n-1-j):
'''从头排到尾'''
if a_list[i] < a_list[i+1]
a_list[i],a_list[i+1] = a_list[i+1],a_list[i]
时间复杂度:o(n^2)
稳定性: 稳定
优化时间复杂度:
def bubble_sort(a_list):
'''冒泡排序'''
n = len(a_list)
for j in range(n-1):
coun = 0
for i in range(n-1-j):
'''从头排到尾'''
if a_list[i] < a_list[i+1]
a_list[i],a_list[i+1] = a_list[i+1],a_list[i]
count += 1
if 0 == count:
'''列表本身是有序时,直接退出循环'''
break
选择排序:
从未排序的序列中选择最小的往前面去放.
代码:
def select_sort(a_list):
'''选择排序'''
n = len(a_list)
for j in range(n-1):
min_index = j
for i in rnage(j+1,n):
if a_list[min_index] > a_list[i]
min_index = i
a_list[i],a_list[min_index] = a_list[min_index],a_list[i]
时间复杂度: o(n^2)
稳定性: 不稳定(升序排序时不稳定)
插入排序算法:
将序列分为有序和无序两部分,然后把后面无序的插入前面有序的序列中.
代码:
def insert_sort(a_list):
n = len(a_list)
'''插入排序'''
for j in (1,n):
i = j
whlie i > 0:
if a_list[i] < a_list[i-1]
a_list[i],a_list[i-1] = a_list[i-1],a_list[i]
i -= 1
else:
break # 内存优化,此时内部循环时间复杂度o(1)
时间复杂度: o(n^2)
稳定性:稳定