冒泡排序法解析
Posted 地中海程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序法解析相关的知识,希望对你有一定的参考价值。
1 什么是冒泡排序法?
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
以上是来自百度百科的解释。
2 冒泡排序法原理
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
以上来自百度百科。
3 冒泡排序法的详细过程
假定有这样一个数组
int[] nums = new int[]{6, 4, 5, 1, 3, 2};
倒序排序代码如下(正序排序只需要将if判断中的nums[i] < nums[j]改为nums[i] >nums[j]即可):
public static void desc(int[] nums) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] < nums[j]) {
nums[i] = nums[i] + nums[j];
nums[j] = nums[i] - nums[j];
nums[i] = nums[i] - nums[j];
}
}
}
}
排序详细过程如下:
[6, 4, 5, 1, 3, 2]
[6, 5, 4, 1, 3, 2]
[6, 5, 4, 1, 3, 2]
[6, 5, 4, 3, 1, 2]
[6, 5, 4, 3, 2, 1]
[6, 5, 4, 3, 2, 1]
第一次循环将第一个数6和其他5个数作比较,如果6小于剩余5个数中的其中一个,则和该数交换位置,由于其他五个数都小于6,因此6的位置不需要变动,所以我们得到了第一次排序后的结果:[6, 4, 5, 1, 3, 2]
第二次循环从第二个数开始,从第一次排序后的结果可以知道,第二个数为4,将4和其他剩余的4个数比较,由于第三个数5比4大,因此,4和5交换位置,
由于剩下的3个数1,3,2都比5小,因此第二次排序后的结果为:
[6, 5, 4, 1, 3, 2]
依此类推。。。
4 冒泡排序法的算法复杂度
由上述代码可以看到,算法的核心是元素比较和元素交换,因此,算法的复杂度即为元素比较次数和元素交换次数的总和。
元素比较次数C为:
C=5+4+3+2+1=(n-1)+(n-2)+...+2+1=(1+(n-1)) * ( (n-1)/2 )=(n^2)/2-n/2=(n*(n-1))/2
元素交换次数M为比较次数的三倍:
M=(5+4+3+2+1)*3=((n-1)+(n-2)+...+2+1)*3=3(n^2)/2-3n/2=(3n*(n-1))/2
相加之后的结果S为:
S=(4n*(n-1))/2=2N^2-2N=O(n^2)
冒泡排序的时间复杂度为O(n^2)
5 结语
感谢各位的阅读,如有问题,欢迎大家留言反馈,我会在第一时间修正。
如果觉得文章对您有帮助,不妨点个关注吧!!!
以上是关于冒泡排序法解析的主要内容,如果未能解决你的问题,请参考以下文章