冒泡排序
来源:互联网 发布:win10系统重装软件 编辑:程序博客网 时间:2024/05/21 06:20
思想
它是经过一系列的交换动作。首先第一个元素和第二个元素比较,如果第一个大,则二者交换,否则不交换;然后第二个元素和第三个元素交换,若果第二个元素大,则交换,否则不交换……直到按照这种方式进行下去,最终最大的那个元素被交换到最后一个位置,一趟冒泡排序完成。下一趟排序同样上面的操作,但是只交换到倒数第二个位置,这个位置是第二大的元素。直到一趟排序中没有交换元素时候排序结束。这样每次把一个元素找到对应位置,大的上浮,小的下浮。
步骤
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
例子
上面一个过程应该是一趟排序
动画
算法
package alg.sort;public class BubbleSort { public void sort(int[] A){ int n = A.length; boolean flag = true;; for(int i=n-1;i>=0;i--){ flag = true; for(int j=0;j<i;j++){ if(A[j]>A[j+1]){ int tmp = A[j]; A[j] = A[j+1]; A[j+1] = tmp; flag = false; } } if(flag) return; } } public static void main(String[] args){ int[] A = new int[]{49,38,65,97,76,13,27,49}; Print.printArray(A); BubbleSort bubbleSort = new BubbleSort(); bubbleSort.sort(A); Print.printArray(A); }}
复杂度分析
(1)时间复杂度
最好情况:原始序列有序,不需要交换,时间复杂度
最坏情况:元素序列逆序,第i个元素回到排序位置应该交换i次,时间复杂度
平均时间复杂度
(2)空间复杂度
只用到常量的空间,空间复杂度
说明:
在一次排序后,可以使得最大元素回到排序后的位置
参考
1.《数据结构高分笔记》
2.链接
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- [leetcode]222. Count Complete Tree Nodes
- QThread多线程编程经典案例分析
- 分布式与集群的联系与区别
- mac环境下重置Mysql密码
- Java的常用类与接口
- 冒泡排序
- Unity2D Sprite Editor 图片切割
- 几种session存储方式比较
- Android 快速开发系列 ORMLite 框架最佳实践
- vue.js-step-everthing-4
- YARN的发展背景及基本原理
- git - 简易使用
- Android Application对象必须掌握的七点
- Unity Lua语法提示