加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python实现冒泡法排序的几种方式

(2017-03-10 15:33:11)
标签:

python

分类: 算法

 

冒泡排序是非常容易理解和实现,,以从小到大排序举例:

设数组长度为N

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就到数组第N-1个位置。

3N=N-1,如果N不为0就重复前面二步,否则排序完成。

 

代码实现:

1. 1种方法:

#!/usr/bin/python
if __name__ == "__main__":
    arr = [
6, 1, 4, 7, 9, 5, 2, 3, 10, 8]
   
for i in range(0,len(arr)-1):
       
for j in range(0,len(arr)-1):
           
if arr[j] > arr[j+1]:
                arr[j],arr[j+
1]=arr[j+1],arr[j]
   
print arr

--------------------------------------------

运行的结果为:E:\python2.7\python.exe E:/python2.7/test/sort/bublesort2.py

[1, 6, 4, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 5, 9, 2, 3, 10, 8]

[1, 4, 6, 7, 5, 2, 9, 3, 10, 8]

[1, 4, 6, 7, 5, 2, 3, 9, 10, 8]

[1, 4, 6, 7, 5, 2, 3, 9, 10, 8]

[1, 4, 6, 7, 5, 2, 3, 9, 8, 10]

[1, 4, 6, 7, 5, 2, 3, 9, 8, 10]

[1, 4, 6, 7, 5, 2, 3, 9, 8, 10]

[1, 4, 6, 7, 5, 2, 3, 9, 8, 10]

[1, 4, 6, 5, 7, 2, 3, 9, 8, 10]

[1, 4, 6, 5, 2, 7, 3, 9, 8, 10]

[1, 4, 6, 5, 2, 3, 7, 9, 8, 10]

[1, 4, 6, 5, 2, 3, 7, 9, 8, 10]

[1, 4, 6, 5, 2, 3, 7, 8, 9, 10]

[1, 4, 6, 5, 2, 3, 7, 8, 9, 10]

[1, 4, 6, 5, 2, 3, 7, 8, 9, 10]

[1, 4, 5, 6, 2, 3, 7, 8, 9, 10]

[1, 4, 5, 2, 6, 3, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 2, 5, 3, 6, 7, 8, 9, 10]

[1, 4, 2, 3, 5, 6, 7, 8, 9, 10]

[1, 4, 2, 3, 5, 6, 7, 8, 9, 10]

[1, 4, 2, 3, 5, 6, 7, 8, 9, 10]

[1, 4, 2, 3, 5, 6, 7, 8, 9, 10]

[1, 2, 4, 3, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

Process finished with exit code 0

 

 

或者

 

#!/usr/bin/python
if __name__ == "__main__":
    arr = [
6, 1, 4, 7, 9, 5, 2, 3, 10, 8]
   
for i in range(0,len(arr)-1):
       
for j in range(0,len(arr)-1-i):
           
if arr[j] > arr[j+1]:
                arr[j],arr[j+
1]=arr[j+1],arr[j]
           
print arr

 

2.2种方法:

设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。

#!/usr/bin/python
if __name__ == "__main__":
    arr = [
6, 1, 4, 7, 9, 5, 2, 3, 10, 8]
   
for i in range(0,len(arr)-1):
        flag =
0
       
for j in range(0,len(arr)-1):
           
if arr[j] > arr[j+1]:
                arr[j],arr[j+
1]=arr[j+1],arr[j]
                flag =
1
               
print arr
       
if flag == 0:
           
break

----------------------------------------------------

运行的结果为:E:\python2.7\python.exe E:/python2.7/test/sort/bubllesort3.py

[1, 6, 4, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 9, 5, 2, 3, 10, 8]

[1, 4, 6, 7, 5, 9, 2, 3, 10, 8]

[1, 4, 6, 7, 5, 2, 9, 3, 10, 8]

[1, 4, 6, 7, 5, 2, 3, 9, 10, 8]

[1, 4, 6, 7, 5, 2, 3, 9, 8, 10]

[1, 4, 6, 5, 7, 2, 3, 9, 8, 10]

[1, 4, 6, 5, 2, 7, 3, 9, 8, 10]

[1, 4, 6, 5, 2, 3, 7, 9, 8, 10]

[1, 4, 6, 5, 2, 3, 7, 8, 9, 10]

[1, 4, 5, 6, 2, 3, 7, 8, 9, 10]

[1, 4, 5, 2, 6, 3, 7, 8, 9, 10]

[1, 4, 5, 2, 3, 6, 7, 8, 9, 10]

[1, 4, 2, 5, 3, 6, 7, 8, 9, 10]

[1, 4, 2, 3, 5, 6, 7, 8, 9, 10]

[1, 2, 4, 3, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

Process finished with exit code 0

 

Best Regards,

Xinyi(新依)

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有