vlambda博客
学习文章列表

python之冒泡排序法

冒泡排序 (Bubble Sort),是一种计算机科学领域的较简单的排序算法。

 
   
   
 
  1. 以下内容来自百度:

  2. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从ZA)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

  3. 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。


  4. 冒泡排序算法的原理如下:

  5. a.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  6. b.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  7. c.针对所有的元素重复以上的步骤,除了最后一个。

  8. d.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例题:排列大小

 
   
   
 
  1. l=[9,5,3,4,1,8,7,2,6]

  2. l中的数字按照从小到大排列。

  3. python中可直接l.sort() 即可完成,但这不是今天的重点,今天的重点是如何使用冒泡排序来完成从小到大的排列。

 
   
   
 
  1. 思路:依次将第一个数字与后面的数字进行比较,如果比后面的数字大就将大的数字放后面。

  2. 第一次可得:534187269

  3. 代码:

  4. l=[9,5,3,4,1,8,7,2,6]

  5. for i in range(0,len(l)-1):

  6. if l[i]>l[i+1]:

  7. n=l[i]

  8. l[i]=l[i+1]

  9. l[i+1]=n

  10. print(n)--->[5, 3, 4, 1, 8, 7, 2, 6, 9]


  11. 那聪明的你肯定想到了重复此操作循环不就可以了,对的,只需要在上段代码中再添加一个循环。

  12. 代码:

  13. for j in range(0,len(l)-1):

  14. for i in range(0,len(l)-1):

  15. if l[i]>l[i+1]:

  16. n=l[i]

  17. l[i]=l[i+1]

  18. l[i+1]=n

  19. print(l)--->[1, 2, 3, 4, 5, 6, 7, 8, 9]

 
   
   
 
  1. 伪代码就是:

  2. [5, 3, 4, 1, 8, 7, 2, 6, 9] 第一次

  3. [3, 4, 1, 5, 7, 2, 6, 8, 9] 第二次

  4. [3, 1, 4, 5, 2, 6, 7, 8, 9] 第三次

  5. [1, 3, 4, 2, 5, 6, 7, 8, 9] 第四次

  6. [1, 3, 2, 4, 5, 6, 7, 8, 9] 第五次

  7. [1, 2, 3, 4, 5, 6, 7, 8, 9] 第六次

  8. [1, 2, 3, 4, 5, 6, 7, 8, 9] 第七次

  9. [1, 2, 3, 4, 5, 6, 7, 8, 9] 第八次

  10. [1, 2, 3, 4, 5, 6, 7, 8, 9] 第九次

  11. [1, 2, 3, 4, 5, 6, 7, 8, 9] 第十次

 
   
   
 
  1. 通过上面的规律可以进一步发现,第一次遍历后最后一位肯定是最大,无需加入遍历,第二次遍历后最后最后二次肯定是最大无需遍历。所以代码可以进一步优化。另外python语言的独特性,连变量n都不必用到:

  2. for j in range(0,len(l)-1):

  3. for i in range(0,len(l)-1-j):

  4. if l[i]>l[i+1]:

  5. l[i],l[i+1]=l[i+1],l[i]

  6. print(l)--->[1, 2, 3, 4, 5, 6, 7, 8, 9]