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个数值。

使用插入排序方法时排序说明: 

1)第1轮:把第1个元素当1组。
2)第2轮:把第1,2个元素当1组,排好序。排序前是1个元素,第2个元素与第1个比较。
3)第3轮:把第1,2,3个元素当1组,排好序。排序前是2个元素,第3个元素与前2个比较,然后放在合适的位置。
4)最终实现排序。
 
#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]

 

 
posted @ 2018-02-02 09:16  milkty  阅读(238)  评论(0编辑  收藏  举报