数据结构学习之冒泡算法
来源:互联网 发布:房产中介必备软件 编辑:程序博客网 时间:2024/05/20 21:47
class ArrayBub{ private long[] a; private int nElems; public ArrayBub(int max) { a = new long[max]; nElems = 0; } public void insert(long value) { a[nElems] = value; nElems++; } public void display() { for (int j = 0; j < nElems; j++) { System.out.print(a[j] + " "); } System.out.println(" "); } public void bubbleSort() { int out; int in; for (out = nElems - 1; out > 1; out--) { for (in = 0 ; in < out; in++) { if (a[in] > a[in+1]) swap(in,in+1); } } } private void swap(int n1,int n2){ long temp = a[n1]; a[n1] = a[n2]; a[n2] = temp; }}public class bubbleSort { public static void main(String[] args) { ArrayBub arr = new ArrayBub(100); arr.insert(77); arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); arr.bubbleSort(); arr.display(); }}
算法思路
将最大的数据项放在数组的最后面。
外层for循环的计数器out从数组的最后面开始,即out等于nElems-1,每经过一次out-1。下标大于out的都是已经排序好的,变量out在每完成一次内部循环(计数器减一)向左一位,一次算法就不用再处理那些排序好的数据。
内层for循环的计数器in从数组的最左边算起,内部循环体每次自增1,当等于out的时候结束循环。
第一次外层循环,out=9,进入内循环,比较a[0]和a[1],然后两者间的较大值与a[2]比较,以此类推,一直比较到a[8]{这个理解很重要,因为并不会立刻比较到a[9],下面有一个a[n+1],故这里面就是最大为a[8],然后让这个最大的a[8]去和a[9]比较,也可以理解为in实际上最大就是nElmes-2}这9个数,找出其中的最大数,然后放在a[9]的位置。
定义了一个数组类,主函数中创建了一个数组对象,通过圆点运算符来访问和调用它的数据和方法,在这个数组类中定义了一个insert()方法(用来对数组插入),一个display()方法(用来打印数据),一个bubbleSort()方法,就是本程序的核心,swap()方法用来实现bubbleSort()。
这里将方法全部定义在数组类中,是为了在主函数中不进行方法的编写,使得代码看起来更加简洁,这样容易维护。
冒泡算法的效率:
若数组中有N个数据项,则需要比较的次数为
N+(N-1)+(N-2)+…+1=N*(N-1)/2
忽略减一,且大O算法中不算常数,故需要O(N^2)时间级别。
0 0
- 数据结构学习之冒泡算法
- C++学习之数据结构及算法——冒泡排序
- 数据结构与算法学习之路:优化的冒泡排序
- 新手学习数据结构与算法---冒泡排序
- 数据结构与算法学习:冒泡排序
- 数据结构与算法之二冒泡排序
- 数据结构--排序算法之冒泡排序
- 数据结构与算法之冒泡排序
- 数据结构 排序算法之冒泡排序
- 数据结构排序算法之冒泡排序法
- 数据结构<一> 排序算法之冒泡排序
- 数据结构与算法之冒泡排序
- Python3 数据结构与算法之冒泡排序
- 算法学习之冒泡排序
- 学习算法之冒泡排序
- 数据结构学习之冒泡排序Java实现
- 数据结构学习之_冒泡排序法
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 【项目经验】——考试倒计时
- Qt初体验
- COM 学习
- asp.net小数点四舍五入的正确写法
- 用PHP开发购物车网站(第二篇):PDO数据库
- 数据结构学习之冒泡算法
- 排序之冒泡java版
- java 单例模式
- 数据结构课程笔记--(1)求最大子列的问题
- mini2440 烧写流程
- java实现定时任务的三种方法
- 沙盒目录操作注意
- JAVA byte十六进制存储
- html5记录