'''
冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端
'''
data_set = [12,45,2,48,66,2,1,56,36,90,5,10,503]
for i in range(len(data_set)): ##控制相邻比较的轮数
for j in range(len(data_set)-i-1): #控制每轮相邻比较的次数
#如果前面的元素的值大于后面一个元素 互换值
if data_set[j]>data_set[j+1]:
temp = data_set[j]
data_set[j]=data_set[j+1]
data_set[j+1]=temp
#print(data_set)
print(data_set)
'''
选择排序
从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作
'''
data_set = [12,45,2,48,66,2,1,56,36,90,5,10,503]
for i in range(len(data_set)): #大圈决定轮数 也就是我们选择的次数
minIndex = i
for j in range(i+1,len(data_set)): #小圈就是我们每次 选择后比较的次数
#//如果后面的元素比我选择元素还小 就互换位置
if data_set[j] < data_set[minIndex] :
minIndex=j
temp = data_set[i]
data_set[i]=data_set[minIndex]
data_set[minIndex] = temp
print(data_set)
'''
插入排序
插入排序(Insertion Sort)的基本思想是:将列表分为2部分,左边为排序好的部分,右边为未排序的部分,循环整个列表,每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
'''
source = [12,45,2,48,66,2,1,56,36,90,5,10,503]
for i in range(1,len(source)):
current_val = source[i] #先记下每次大循环走到的第几个元素的值
position = i
while position>0 and source[position-1]>current_val: #循环次数i大于0 and 前一位数大于后一位数
source[position] = source[position-1] # 讲后一位数放到前面 , 根据值的大小排序
position -= 1 #把前面的数放到后面
source[position] = current_val #已经找到了左边排序好的列表里不小于current_val的元素的位置,把current_val放在这里
print(source)