您的位置:首页 > 其它

排序算法总结之冒泡排序

2016-03-02 22:12 162 查看
排序的方法很多,但每种算法都有自己的特点。本文总结了排序算法,排序算法最坏情况循环n *n 次,所以时间复杂度为O(n^2),而且算法稳定,易懂是该算法的特点

冒泡排序:

冒泡排序易于理解和接收,它是通过随机给定一个数组,然后让下标i和j分别指向array[0]和array[1]。比较array[j]和array[j-1],如果array[j-1]>array[j],则互换并且j++。比较完一轮后i++。直到i <=n-1。

手动步骤:

eg:1 4 7 89 67 21

第一轮(i = 0):

1 4 7 89 67 21

j = 1, array[j-1]>array[j]不成立,不互换,j+1

1 4 7 89 67 21

j = 2,array[j-1]>array[j]不成立,不互换,j+1

1 4 7 89 67 21

j = 3,array[j-1]>array[j]不成立, 不互换,j+1

1 4 7 89 67 21

j = 4,array[j-1]>array[j]成立,互换,j+1

1 4 7 67 89 21

j = 5,array[j-1]>array[j]成立,互换,j+1

1 4 7 67 21 89

j = 6,j=n-i成立,i +1,j=1

第二轮(i = 1):

1 4 7 67 21 89

j = 1,array[j-1]>array[j]不成立,不交换,j+1

1 4 7 67 21 89

j = 2,array[j-1]>array[j]不成立,不交换,j+1

1 4 7 67 21 89

j = 3,array[j-1]>array[j]不成立,不交换,j+1

1 4 7 67 21 89

j = 4,array[j-1]>array[j]成立,交换,j+1

1 4 7 21 67 89

j = 5,j = n-i成立,i+1,j+1

第三轮(i = 5):

……….

第n-1轮(i = 6)。

冒泡排序程序代码:



验证代码(主函数):





冒泡程序的优化:

优化方案1:

上述冒泡程序并不是最简洁的,如果i还没循环到length-1时就排好序了,i并不会停止,会继续增加循环。所以,上述的冒泡算法可以更优化。

设置一个flag状态量。用来记录本轮循环中是否有交换,如果有交换则值为1,否则置为0.为1时i继续增加,如果为0,则跳出循环。优化后的程序如下:



优化方案2:

第一种优化方案相对于最基本的冒泡排序相比更为简洁,但是在这个方案的基础上可以再进一步改进。设置一个变量first_swap 用来存放每一轮中第一次交换内容的下标值j。下一轮循环中,j直接从下标first_swap开始查询。如果本轮中没有进行交换则排序完成。具体程序如下:



这两种优化时间复杂度还是O(n^2),但是循环次数减少了,达到了一定的优化效果,可以通过更改主函数程序中使用的冒泡程序,来比较同样多数据用不同方案时间所用的时间。可能值还不是最好的优化,还有待大家继续努力,写出更好的优化方案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: