数据结构与算法_冒泡排序
来源:互联网 发布:颜体 知乎 编辑:程序博客网 时间:2024/06/04 19:26
我是野猪。
排序: 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。对数据进行排序有可能是检索的一个初始步骤。二分查找比线性查找要快的多,然而它只能应用于有序的数据。其次排序非常重要也可能非常耗时。
冒泡排序、选择排序和插入排序都是简单排序,算法时间复杂度都是O(n^2)。
冒泡排序是在各大教科书排序篇章中牢牢占据首位,我一直想这是为啥,是因为它效率高?那肯定不能够,众所周知冒泡排序是效率最低的;那就是它最简单,至少是在代码上相当的简单,对于初学者来说,写一个冒泡排序写对的概率其实要比其他O(n^2)的算法高不少。还有一个答案可能就是只是为了学习怎么用for循环,但这个简单的for循环却能让大家意识到,看似复杂的数据可以通过简单的交换来实现。
冒泡排序的原理:冒泡的意思就是一次循环把最大值交换到末尾,显然第一次比较的次数最多是N,第二次比较次数最多是N-1次, 一直到最后比较一次,所以总共的次数是1+....+N-1= (1 + N-1)(N-1) /2 = N(N-1)/2,因此时间复杂度为O(n^2);
java代码:
/** * 冒泡排序 * 优点:稳定 * 缺点:慢 时间复杂度是O(N2) 自己算下就可以理解 * 时间复杂度分析:冒泡的意思就是一次循环把最大值交换到末尾,显然第一次比较的次数最多是N,第二次比较次数最多是N-1次, * 一直到最后比较一次,所以总共的次数是1+....+N-1= (1 + N-1)(N-1) /2 = N(N-1)/2; 因此时间复杂度为O(N 2); */public class BubbleSort { public static void main(String[] args) { int sore[] = {3, 7, 2}; //从小到大 bubleSortByAsc(sore); } private static void bubleSortByAsc(int[] sore) { //冒泡排序 明确下标的范围 从小到大排序 for (int i = 0; i < sore.length; i++) { for (int j = 0; j < sore.length - i - 1; j++) { if (sore[j] > sore[j + 1]) { int temp = sore[j]; sore[j] = sore[j + 1]; sore[j + 1] = temp; } System.out.print("第" + i + "趟," + "第" + j + "次结果:"); print(sore); System.out.println("\t"); } } System.out.println("冒泡排序后:"); for (int i = 0; i < sore.length; i++) { System.out.println(sore[i] + "\t"); } } private static void print(int[] sore) { for (int i = 0; i < sore.length; i++) { System.out.print(sore[i] + "\t"); } }}输出结果:
冒泡排序相对简单,多敲几遍就能理解的很透彻。
阅读全文
1 0
- 数据结构与算法_冒泡排序
- 数据结构(C#)_排序算法(冒泡排序)
- 【数据结构与算法】冒泡排序
- 数据结构与算法-冒泡排序
- 数据结构与算法-----冒泡排序
- 【数据结构与算法】冒泡排序
- 【数据结构与算法】冒泡排序
- 【DAY.2】PHP数据结构与算法_排序_冒泡排序
- 数据结构_冒泡排序
- 数据结构_冒泡排序
- 数据结构与算法(冒泡排序算法)
- 冒泡排序 Java数据结构与算法
- 新手学习数据结构与算法---冒泡排序
- 数据结构与算法之二冒泡排序
- python数据结构与算法30 冒泡排序
- 数据结构精要------冒泡与直接排序算法
- 【数据结构与算法 01】冒泡排序
- [数据结构与算法]C#冒泡排序
- 骗子修成手册 正与反、黑与白 人性至贱
- 共用体
- jQuery+php实现ajax文件即时上传
- Lnmp1.4 一键安装包 安装php fileinfo扩展
- BASIC-2 基础练习 01字串
- 数据结构与算法_冒泡排序
- V9.7 企业版 DB2 license过期解决方案
- 两个Linux查询语句
- Android基础小知识
- 第三周——顺序表的应用
- easyui中idField的作用
- 机器学习笔记--classification_report&精确度/召回率/F1值
- spring mvc(注解)上传文件的简单例子
- ibatis isEmpty 和 isNull 区别