1.冒泡排序
冒泡排序即重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端;
步骤:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一步后,最后的元素应该是最大的数。
3.针对所有的元素重复以上的步骤,除了上一步最后一个数不做比较。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现:
# _*_coding:utf-8_*_
def bubble_sort(lst):
length = len(lst)
for index in range(length):
for i in range(1, length-index):
if lst[i-1] > lst[i]:
lst[i], lst[i-1] = lst[i-1], lst[i]
return lst
if __name__ == "__main__":
test_lst = [10, 23, 1, 53, 654, 54, 16, 646, 65, 3155, 546, 31]
print bubble_sort(test_lst)
注意:列表交换元素不需要设置temp变量
lst = [1, 2, 3, 4, 5]
lst[0], lst[1] = lst[1], lst[0]
print lst
2.选择排序
从待排序的数据元素中选出最小(或最大)的一个元素,存放在每趟序列的起始位置,直到全部待排序的数据元素排完
代码实现:
# _*_coding:utf-8_*_
def select_sort(lst):
length = len(lst)
for index in range(length):
for i in range(index, length):
if lst[index] > lst[i]:
lst[index], lst[i] = lst[i], lst[index]
return lst
if __name__ == "__main__":
test_lst = [10, 23, 1, 53, 654, 54, 16, 646, 65, 3155, 546, 31]
print select_sort(test_lst)
3.插入排序
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的值中适当位置上,直到全部插入完为止。
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤2~5
代码实现:
# _*_coding:utf-8_*_
def insert_sort(lst):
count = len(lst)
for i in range(1, count):
key = lst[i]
j = i-1
while j >= 0:
if lst[j] > key:
lst[j+1] = lst[j]
lst[j] = key
j -= 1
return lst
if __name__ == "__main__":
test_lst = [10, 23, 1, 53, 654, 54, 16, 646, 65, 3155, 546, 31]
print insert_sort(test_lst)
4.希尔排序
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 dt=1(dt<dt-1....d2,d1) 即所有记录放在同一组中进行直接插入排序为止
代码实现:
# _*_ coding:utf-8 _*_
def shell_sort(lst):
length = len(lst)
dist = length/2
while dist > 0:
for i in range(dist, length):
temp = lst[i]
j = i
while j > dist and temp < lst[j-dist]:
lst[j] = lst[j-dist]
j -= dist
lst[j] = temp
dist /= 2
return lst
if __name__ == "__main__":
test_lst = [10, 23, 1, 53, 654, 54, 16, 646, 65, 3155, 546, 31]
print shell_sort(test_lst)