排序之冒泡排序
Posted 路过你的全世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之冒泡排序相关的知识,希望对你有一定的参考价值。
冒泡排序思想
对于一个数字序列来说,我们可以依次比较相邻的两项数字,假如相邻的两项分别记为A和B。如果A的值大于B,那么进行A、B之间顺序的交换,将较大值移到后面。之后再用第二个值与第三个值进行比较,将较大的值放到后面,以此类推。
冒泡排序示例
每次遍历一次序列,都会找到一个数的最终位置。文字讲解会比较抽象,以下为具体事例:
假设一个序列为:24 ,12,42,67,53,21,90,69
则排序过程如下:
第一趟排序(找0~n-1序列中最大的值,并放在最后的位置):
12,24,42,53,21,67,69,90
第二趟排序(找0~n-2序列中的最大值,放在倒数第二位置):
12,24,42,21,53,67,69,90
第三趟排序(确定倒数第三个位置)
12,24,21,42,53,67,69,90
第四趟排序(确定倒数第四个位置)
12,21,24,42,53,67,69,90
之后进行第五趟排序,在进行第五趟排序中发现当前序列中没有发生位置转换,则说明序列已经有序。
冒泡排序代码实现
private static void performSort(int[] array)
int length = array.length;
//设置一个变量值,标记是否进行了序列移动
boolean flag = true;
while (flag)
flag = false;
for (int i = 1; i < length; i++)
if (array[i - 1] > array[i])
int temp = array[i];
array[i] = array[i - 1];
array[i - 1] = temp;
flag = true;
--length;
冒泡排序性能分析
(1)时间复杂度
在设置标志变量之后:
当原始序列“正序”排列时,冒泡排序总的比较次数为n-1,移动次数为0,也就是说冒泡排序在最好情况下的时间复杂度为O(n);
当原始序列“逆序”排序时,冒泡排序总的比较次数为n(n-1)/2,移动次数为3n(n-1)/2次,所以冒泡排序在最坏情况下的时间复杂度为O(n^2);
当原始序列杂乱无序时,冒泡排序的平均时间复杂度为O(n^2)。
(2)空间复杂度
冒泡排序排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。
(3)稳定性
冒泡排序在排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
以上是关于排序之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章
11.python排序算法之冒泡排序简单选择排序,二元选择排序直接插入排序