class SortList(object):
'''定义一个类方法,把多种排序方法集成起来'''
def __init__(self,items=None):
self.items=items
def bubble_sort(self,li):
"""
冒泡排序 # 稳定性:稳定
# 最优时间复杂度 :O(n)
# 最坏时间复杂度 :O(n^2)
:param li:
:return:
"""
n = len(li)
# 共执行冒泡排序的趟数,n-1趟
for j in range(n - 1): # 0 1 2 3
flag = False
# 遍历列表,从0位置移动到倒数第二个位置
for i in range(n - 1 - j): # n-1 n-2 n-3
# 判断当前位置与下一个位置的数据,如果大于下一个位置的数据,交换
if li[i] > li[i + 1]:
li[i], li[i + 1] = li[i + 1], li[i]
flag = True
if flag == False:
break
def select_sort(self,li):
'''
选择排序 # 稳定性 : 不稳定
# 最优时间复杂度 :O(n^2)
# 最坏时间复杂度 :O(n^2)
:param li:
:return:
'''
n = len(li)
# 选择的次数,n-1次,每一次选择一个最小的数,依次放到0~n-1 位置
for j in range(n - 1):
# 选择一次,把最小的数放到0位置
# 认为0位置的数据最小,记录0位置
min_index = j
# 那最小的数,跟后面所有的数据进行比较
for i in range(1 + j, n):
# 拿最小的数跟当前位置的数比较,让min_index 记录最小的数的位置
if li[i] < li[min_index]:
min_index = i
# for循环结束,min_index指向最小的数
li[min_index], li[j] = li[j], li[min_index]
def insert_sort(self,li):
"""
插入排序 # 稳定性 : 稳定
# 最坏时间复杂度:O(n^2)
# 最优时间复杂度:O(n)
:param li:
:return:
"""
n = len(li)
# 每次把一个数插入到前面有序序列,从1位置到n位置
for j in range(1, n):
# 认为第一个数据有序,从后面拿一个数据,跟前面有序序列再组成有序
# 把指定位置的数据插入到前面有序序列中
for i in range(j, 0, -1): # 2 1
if li[i] < li[i - 1]:
li[i], li[i - 1] = li[i - 1], li[i]
else:
# 当前位置的数据已经大于前面有序序列的最后一个数,终止循环
break
l = [11,3,13,4,5,2,44,33]
# s=SortList().bubble_sort(l)
# s=SortList().select_sort(l)
s=SortList().insert_sort(l)
print(l)