您的位置:首页 > 其它

排序算法之冒泡排序

2017-05-18 11:43 197 查看

冒泡排序

冒泡排序算法是蛮力算法设计思想的一个典型应用,相应的还有选择排序,后后续会谈到。冒泡排序算法的核心思想就是比较表中的相邻元素,如果它们是逆序的话就交换它们的位置,重复多次以后,最终,最大的元素就“沉到”了列表中的最后一个位置。第二遍操作将第二大的元素沉下去,依次执行n-次,从而得到有序的列表。第i遍冒泡排序可以用下面的示例图表示:



竖线后面的表示已经排好序的部分最大元素,前面表示排序的过程。

代码实现

改进的冒泡排序算法的java实现代码如下:

import java.util.*;
//改进的冒泡排序算法
public class BubbleSort {
public int[] bubbleSort(int[] A, int n) {

for(int i=0;i<n-1;i++){
//定义一个标志变量
boolean flag = false;
for(int j=0;j<n-i-1;j++){

if(A[j]>A[j+1]){
int temp = A[j];
A[j] = A[j+1];
A[j+1] =  temp;
flag = true;
}
}
//如果标志变量没有发生变化,说明内部已经全部有序,直接跳出循环即可
if(!flag){
break;
}
}
return A;
}
}


改进冒泡排序算法的思路是冒泡排序在不断进行相邻比较,交换迭代的过程中,如果在第i次迭代中相邻元素没有发生一次交换,说明列表内部已经完成排序,无需进行后面的迭代,从而提升了排序效率。这里可以在代码中设置一个标志变量用于标记第i次迭代是否发生元素交换,根据标志变量的值做出相应的处理即可。

算法时间复杂度分析

冒泡排序算法的基本操作是相邻元素的比较,即A[j]与A[j+1]元素的比较。假设算法的输入为规模大小为n的数组,则最好情况下即输入的数组为一个升序有序数组,那么算法在执行完第一次外层循环时就会结束,基本操作次数为n-1次,故算法的复杂度为O(n);最坏情况下即输入的数组为一个降序数组,那么算法的基本操作次数大约为内外层循环次数之积,故时间复杂度为O(n^2);冒泡排序算法的平均时间复杂度也为O(n^2).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息