排序算法之冒泡排序
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).相关文章推荐
- 排序算法 ->冒泡排序
- 排序算法-冒泡排序
- 排序算法:冒泡排序、插入排序、选择排序、快速排序对比
- 排序算法---冒泡排序
- 排序算法之冒泡排序
- 排序算法java 四 -- 冒泡排序、选择排序
- 排序算法总结1-冒泡排序
- 排序算法之冒泡排序
- 【排序算法】冒泡排序
- 排序算法之冒泡排序
- 常见的排序算法(三) 交换排序(冒泡排序,快速排序)
- 排序算法之冒泡排序
- 排序算法-冒泡排序(入门级别)
- js实现排序算法(冒泡排序,直接插入排序)
- [排序算法总结]冒泡排序、简单选择排序
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- 基础排序算法(一)——冒泡排序
- 排序算法_冒泡排序
- 常用排序算法——鸡尾酒排序(改进的冒泡排序)
- 排序算法 -- (五)冒泡排序