Skip to content

Commit

Permalink
添加 冒泡排序 Python代码
Browse files Browse the repository at this point in the history
  • Loading branch information
amusi committed Jun 22, 2018
1 parent 650e832 commit 5b1f01d
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 6 deletions.
31 changes: 25 additions & 6 deletions Data Structures and Algorithms/sort/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

- <a href="#bubblesort">`冒泡排序(Bubble Sort`</a>

- 选择排序
- <a href="#selectionsort">`选择排序(Selection Sort`</a>

- 插入排序

Expand All @@ -23,11 +23,16 @@

**原理:**比较相邻的两个元素,将值大的元素交换到右边(降序则相反)

**步骤:**比较相邻的元素。如果第一个比第二个大,就交换这两个元素。
**步骤:**

针对所有的元素重复以上步骤,除了最后一个元素。如果有n个元素,那么第一次比较迭代,需要比较n-1次。
1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
3. 针对所有的元素重复以上的步骤,除了最后一个;
4. 重复步骤1~3,直到排序完成。

持续每次对越来越小的元素重复上面的步骤,直到没有任何一对数字需要比较。
比如有n个元素,那么第一次比较迭代,需要比较n-1次(因为是相邻成对比较,最后一个元素没有与下一个相邻比较的对象,所以是n-1次),此次迭代完成后确定了最后一个元素为最大值;第二次比较迭代,需要比较n-2次,因为第一次迭代已经确定好了最后一个元素,所以不再需要比较;...;第 i次比较迭代,需要比较n-i次,此时确定后面i个元素是有序的较大元素;...;第n-1次比较迭代,需要比较n-(n-1)次,此时完成冒泡排序操作。

时间复杂度:o(n^2) = (n-1)*(n-1)

![img](http://hiphotos.baidu.com/feed/pic/item/024f78f0f736afc3b54b2bfab819ebc4b64512ed.jpg)

Expand Down Expand Up @@ -121,7 +126,7 @@

**复杂度分析:**

时间复杂度:若给定的数组刚好是排好序的数组,采用改进后的冒泡排序算法,只需循环一次就行了,此时是最优时间复杂度:O(n),若给定的是倒序,此时是最差时间复杂度:O(n2) ,因此综合平均时间复杂度为:O(n2)
时间复杂度:若给定的数组刚好是排好序的数组,采用改进后的冒泡排序算法,只需循环一次就行了,此时是最优时间复杂度:O(n),若给定的是倒序,此时是最差时间复杂度:O(n^2) ,因此综合平均时间复杂度为:O(n^2)

空间复杂度:因为每次只需开辟一个temp的空间,因此空间复杂度是:O(1)

Expand All @@ -131,4 +136,18 @@

1 [经典排序算法之冒泡排序](http://baijiahao.baidu.com/s?id=1585931471155461767&wfr=spider&for=pc)

2 (图示版):[来、通俗聊聊冒泡排序](https://zhuanlan.zhihu.com/p/37077924)
2 (图示版):[来、通俗聊聊冒泡排序](https://zhuanlan.zhihu.com/p/37077924)

<a id="selectionsort"/>

## 选择排序



# 参考

**(推荐)**[十大经典排序算法(动图演示)](https://www.cnblogs.com/onepixel/p/7674659.html)

**(推荐)**[常见排序算法C++总结](https://www.cnblogs.com/zyb428/p/5673738.html)

[排序算法总结](http://www.runoob.com/w3cnote/sort-algorithm-summary.html)
27 changes: 27 additions & 0 deletions Data Structures and Algorithms/sort/bubble_sort.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
''' Summary: 冒泡排序
* Author: Amusi
* Date: 208-05-27
*
* Reference:
* http://en.wikipedia.org/wiki/Bubble_sort
* https://github.com/xtaci/algorithms/blob/master/include/bubble_sort.h
* https://zhuanlan.zhihu.com/p/37077924
*
* 冒泡排序说明:比较相邻的两个元素,将值大的元素交换到右边(降序则相反)
*
'''

def BubbleSort(array):
lengths = len(array)
for i in range(lengths-1):
for j in range(lengths-1-i):
if array[j] > array[j+1]:
array[j+1], array[j] = array[j], array[j+1]

return array


array = [1,3,8,5,2,10,7,16,7,4,5]
print("Original array: ", array)
array = BubbleSort(array)
print("BubbleSort: ", array)

0 comments on commit 5b1f01d

Please sign in to comment.