代码改变世界

Python排序-冒泡排序、选择排序、插入排序

2017-07-24 22:31  白天很白≯  阅读(844)  评论(0编辑  收藏  举报
'''
冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端
'''

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)