(图片是在网络搜索,如侵权,请联系删除)
冒泡排序(Bubble Sort),可以看成是相邻交换的一种排序。
原理是将相邻的元素进按照从大(或从小)的顺序进行比较,交换,最终将最大(或最小)的数字交换到最后一位,从而完成排序。依次类推,最终将元素排好顺序。
按百度百科,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
最基本做法可以利用嵌套for来完成:
for (i = 0; i < n; i++)
for(j = 1; j < n-i; j++)
第一层for(i)循环,将元素从0到N-1进行遍历。
因为如果N-1个元素排序好,最后一个也必然排序完毕,所以i < n
即可;
第二层for(j),决定比较的元素。
因为每一轮比较,都会有一个元素排序完毕,所以设j < n-i
的意思就是每次减少比较被排序好的。
而j = 1
是比较的是a[j-1]与a[j];如果设j = 0
,那么相对应,修改j < n-i-1;
且比较的是a[j]与a[j+1]。
参考学习:
1.白话经典算法系列之一 冒泡排序的三种实现
http://blog.csdn.net/morewindows/article/details/6657829
- 学习如何利用标志优化交换过程;
2.八大排序算法
http://blog.csdn.net/hguisu/article/details/7776068
- 学习排序中进行正向和反向两遍冒泡的方法
性能分析
1.时间复杂度
- 平均时间复杂度:O(n^2)
2.空间复杂度
- 空间复杂度为O(1)
3.冒泡排序具有稳定性