基本思想:它的思路很有特点循环,两两向后比较。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
#冒泡排序 # def bubble_sort(li): # for i in range(len(li)-1): #走一趟,循环的次数 # for j in range(len(li)-i-1): #有序列为,len(li)-i,去掉有序不循环 # if li[j]>li[j+1]: #如果后一个数大,那就交换 # li[j],li[j+1]=li[j+1],li[j]
基本思想:从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。
#选择排序 def select_sort(li): for i in range(len(li)-1): #循环趟 min_loc=i #设置i为最小下标 for j in range(1+i,len(li)-1): #循环无序区 if li[min_loc]>li[j]: #如过不是最小值,就换下标 min_loc=j if min_loc!=i: #如果下标不是原来的值,就互换 li[i],li[min_loc]=li[min_loc],li[i]
基本思想:将列表分为有序区和无序区两个部分,最初有序区只有一个元素,.每次从无序区选择一个元素,插入到无序区的位置,直到无序区变空.
# 插入排序 def insert_sort(li): for i in range(1, len(li)): #走趟,从第一个数开始 tmp = li[i] #tmp为无序区手中拿的那张牌 j = i - 1 #j 为有序区的右侧第一张牌 while j >= 0 and tmp < li[j]: print(li) #当 有序区至少一张牌,且有序区右侧第一张牌大于需要插入的牌时 li[j + 1] = li[j] #有序区右侧第一张牌继续向右移位, j = j - 1 #有序区向右移一位,继续让手牌去比较 li[j + 1] = tmp #当手牌不比左边的牌大了,将手牌插入
原文:http://www.cnblogs.com/fengshuihuan/p/7786659.html