算法之冒泡排序
来源:互联网 发布:数据保险箱 编辑:程序博客网 时间:2024/06/07 16:20
今天我们要讲的是冒泡排序,打算把算法的内容都写成博客的形式。
冒泡排序(Bubble Sort):
它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止。
python 代码
def bubbleSort(alist): for passnum in range(len(alist)-1,0,-1): for i in range(passnum): if alist[i]>alist[i+1]: temp = alist[i] alist[i] = alist[i+1] alist[i+1] = tempalist = [54,26,93,17,77,31,44,55,20]bubbleSort(alist)print(alist)
输出:
[17, 20, 26, 31, 44, 54, 55, 77, 93]
这样就是最好的代码了吗?有没有考虑过如果从一开始就是排好序的或者在中间某次排完序之后整个数列就已经有序了呢?
来看一下下面的代码:
def shortBubbleSort(alist): exchanges = True passnum = len(alist)-1 while passnum > 0 and exchanges: exchanges = False for i in range(passnum): if alist[i]>alist[i+1]: exchanges = True temp = alist[i] alist[i] = alist[i+1] alist[i+1] = temp passnum = passnum-1alist=[20,30,40,90,50,60,70,80,100,110]shortBubbleSort(alist)print(alist)
代码解释:
循环的一开始就设置 exchanges = False,如果有进行交换的话,就会设置为 exchanges = True。如果在某一次循环中,都没有进行交换的话,则不会在进行循环了。
[20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
时间复杂度:
冒泡排序的时间复杂度是O(N2)。
假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1次!因此,冒泡排序的时间复杂度是O(N2)。
参考资料:
(1)http://interactivepython.org/courselib/static/pythonds/SortSearch/TheBubbleSort.html(也可以提高英文水平)
阅读全文
0 0
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之 冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- Lua基础之面向对象
- 手写个快速排序
- 关键字的应用
- javascript编程小练习--制作一个表格,动态增加删除显示班级的学生信息。
- final 关键字
- 算法之冒泡排序
- jzoj5463【NOIP2017提高A组冲刺11.8】证书
- YTU.3185: 分段函数
- P3371 【模板】单源最短路径 SPFA优化 dijkstra堆优化
- 利用console进行简单的js性能测试
- TreeSet 下创建比较器进行比较
- C语言练习题2
- 【codevs 2382】挂缀
- 形参--实参 简单搜集总结