python中关于排序代码
1、冒泡排序
有一个列表有n个数值。
使用冒泡排序方法时排序说明:
1)第一轮排序:从第一个元素开始每次与其后的元素比较,若前一个元素较小位置不变否则两个元素位置替换,最终得出元素最大的值并放在列表最后位置。
2)第二轮排序:只对前n-1个元素进行排序,算法同第一轮。
3)总共需要n-1轮排序。
演示第一轮排序:
mylist=[8,17,9,89,3,234,111,145,23] n=len(mylist) i=0 while i<1: j=0 while j<n-1: if mylist[j]>mylist[j+1]: mylist[j],mylist[j+1]=mylist[j+1],mylist[j] j+=1 i+=1 print mylist
显示结果:
>>>
[8, 9, 17, 3, 89, 111, 145, 23, 234]
全部排序代码(代码中显示了每轮后的显示结果)如下:
#coding:utf-8 ''' 冒泡排序,while语句实现 ''' mylist=[8,17,9,89,3,234,111,145,23] n=len(mylist) i=0 while i<n: j=0 while j<n-1-i: if mylist[j]>mylist[j+1]: mylist[j],mylist[j+1]=mylist[j+1],mylist[j] j+=1 print mylist i+=1 print "第%d轮排序完成" %i #print "第{0}轮排序完成".format(i) print mylist
显示结果如下:
>>>
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 111, 234, 145, 23]
[8, 9, 17, 3, 89, 111, 145, 234, 23]
[8, 9, 17, 3, 89, 111, 145, 23, 234]
第1轮排序完成
[8, 9, 17, 3, 89, 111, 145, 23, 234]
[8, 9, 17, 3, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 23, 145, 234]
第2轮排序完成
[8, 9, 3, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 23, 111, 145, 234]
第3轮排序完成
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第4轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第5轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第6轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第7轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第8轮排序完成
第9轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
添加标记:
#coding:utf-8 ''' 冒泡排序,while语句实现 ''' mylist=[8,17,9,89,3,234,111,145,23] n=len(mylist) i=0 while i<n: flag=True j=0 while j<n-1-i: if mylist[j]>mylist[j+1]: mylist[j],mylist[j+1]=mylist[j+1],mylist[j] flag=False j+=1 print mylist i+=1 print "第%d轮排序完成" %i #print "第{0}轮排序完成".format(i) if flag: break print mylist
>>>
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 234, 111, 145, 23]
[8, 9, 17, 3, 89, 111, 234, 145, 23]
[8, 9, 17, 3, 89, 111, 145, 234, 23]
[8, 9, 17, 3, 89, 111, 145, 23, 234]
第1轮排序完成
[8, 9, 17, 3, 89, 111, 145, 23, 234]
[8, 9, 17, 3, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 145, 23, 234]
[8, 9, 3, 17, 89, 111, 23, 145, 234]
第2轮排序完成
[8, 9, 3, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 111, 23, 145, 234]
[8, 3, 9, 17, 89, 23, 111, 145, 234]
第3轮排序完成
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 89, 23, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第4轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第5轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
二、选择排序
有一个列表有n个数值。
使用选择排序方法时排序说明:
1)第一轮排序:假设第1个元素最小,其他元素都与第1个比较,如果谁小就放在第1个元素。
2)第二轮排序:从第2个元素开始,再做排序,谁最小放到第2个位置。
3)总共需要n-1轮排序。
#coding:utf-8 ''' 选择排序:将剩下的每一个元素和没有比过的做比较,如果小,就交换。 ''' list1=[8,17,9,89,3,234,111,145,23] n=len(list1) for i in xrange(n): small=i for j in range(i+1,n): if list1[j]<list1[small]: small=j if small !=i: list1[i],list1[small]=list1[small],list1[i] print list1 print "第%d轮排序完成" %(i+1) print list1
测试结果如下:
>>>
[3, 17, 9, 89, 8, 234, 111, 145, 23]
第1轮排序完成
[3, 8, 9, 89, 17, 234, 111, 145, 23]
第2轮排序完成
[3, 8, 9, 89, 17, 234, 111, 145, 23]
第3轮排序完成
[3, 8, 9, 17, 89, 234, 111, 145, 23]
第4轮排序完成
[3, 8, 9, 17, 23, 234, 111, 145, 89]
第5轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第6轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第7轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第8轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第9轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
#coding:utf-8 ''' 选择排序:将剩下的每一个元素和没有比过的做比较,如果小,就交换。 ''' list1=[8,17,9,89,3,234,111,145,23] n=len(list1) for i in xrange(n): small=i for j in range(i+1,n): if list1[j]<list1[small]: small=j print list1 if small !=i: list1[i],list1[small]=list1[small],list1[i] print "本次排序最终结果:" print list1 print "第%d轮排序完成" %(i+1) print list1
>>>
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
本次排序最终结果:
[3, 17, 9, 89, 8, 234, 111, 145, 23]
第1轮排序完成
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
[3, 17, 9, 89, 8, 234, 111, 145, 23]
本次排序最终结果:
[3, 8, 9, 89, 17, 234, 111, 145, 23]
第2轮排序完成
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
本次排序最终结果:
[3, 8, 9, 89, 17, 234, 111, 145, 23]
第3轮排序完成
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
[3, 8, 9, 89, 17, 234, 111, 145, 23]
本次排序最终结果:
[3, 8, 9, 17, 89, 234, 111, 145, 23]
第4轮排序完成
[3, 8, 9, 17, 89, 234, 111, 145, 23]
[3, 8, 9, 17, 89, 234, 111, 145, 23]
[3, 8, 9, 17, 89, 234, 111, 145, 23]
[3, 8, 9, 17, 89, 234, 111, 145, 23]
本次排序最终结果:
[3, 8, 9, 17, 23, 234, 111, 145, 89]
第5轮排序完成
[3, 8, 9, 17, 23, 234, 111, 145, 89]
[3, 8, 9, 17, 23, 234, 111, 145, 89]
[3, 8, 9, 17, 23, 234, 111, 145, 89]
本次排序最终结果:
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第6轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
本次排序最终结果:
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第7轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
本次排序最终结果:
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第8轮排序完成
本次排序最终结果:
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第9轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]
三、插入排序
有一个列表有n个数值。
使用插入排序方法时排序说明:
#coding:utf-8 ''' 插入排序:将列表中后一个元素与前边所有元素比较,然后将这个元素放到合适的位置。 ''' list1=[8,17,9,89,3,234,111,145,23] n=len(list1) for i in xrange(n): key=list1[i] print key j=i-1 while j > -1 and list1[j]> key: list1[j+1]=list1[j] j-=1 print list1 list1[j+1]=key #print "本次排序最终结果:", print list1 print "第%d轮排序完成" %(i+1) print list1
>>>
8
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
第1轮排序完成
17
[8, 17, 9, 89, 3, 234, 111, 145, 23]
[8, 17, 9, 89, 3, 234, 111, 145, 23]
第2轮排序完成
9
[8, 17, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
第3轮排序完成
89
[8, 9, 17, 89, 3, 234, 111, 145, 23]
[8, 9, 17, 89, 3, 234, 111, 145, 23]
第4轮排序完成
3
[8, 8, 9, 17, 89, 234, 111, 145, 23]
[3, 8, 9, 17, 89, 234, 111, 145, 23]
第5轮排序完成
234
[3, 8, 9, 17, 89, 234, 111, 145, 23]
[3, 8, 9, 17, 89, 234, 111, 145, 23]
第6轮排序完成
111
[3, 8, 9, 17, 89, 234, 234, 145, 23]
[3, 8, 9, 17, 89, 111, 234, 145, 23]
第7轮排序完成
145
[3, 8, 9, 17, 89, 111, 234, 234, 23]
[3, 8, 9, 17, 89, 111, 145, 234, 23]
第8轮排序完成
23
[3, 8, 9, 17, 89, 89, 111, 145, 234]
[3, 8, 9, 17, 23, 89, 111, 145, 234]
第9轮排序完成
[3, 8, 9, 17, 23, 89, 111, 145, 234]