Java 堆排序算法
/**
* 堆排序
*
* */
public void heapSort(double[] a){
double temp;
initCreateHeap(a);
for(int i = a.length - 1; i > 0; i --){
temp = a[0];
a[0] = a[i];
a[i] = temp;
createHeap(a, i, 0);
}
}
/**
* 将数组看成完全二叉树,建立最大堆
* */
private void initCreateHeap(double[] a){
for(int i = (a.length-1)/2; i >= 0; i --){
createHeap(a, a.length,i);
}
}
private void createHeap(double[] a,int n ,int p){
int a1inum = 2 * p + 1;
boolean currentIsMax = false;
double temp = a[p];
while(a1inum < n && !currentIsMax){
if(a1inum < n -1 && a[a1inum] < a[a1inum+1]){
a1inum ++;//记录左右节点最大的数组元素下标
}
if(temp > a[a1inum]){
currentIsMax = true;
}else{
a[p] = a[a1inum];//将大者放到上移
p = a1inum;
a1inum = 2 * p + 1;
}
}
a[p] = temp;
}
不停的重建堆,知道排序完成。
相关文档:
java初学者必须掌握的基本概念
java初学者必须掌握的基本概念
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联 ......
刚在一个叫51cto的网站看到的,感觉这哥们总结的比较全了,例子都很简单,都能说明问题。收藏,呵呵。
还有就是集合里用的迭代器也是内部类的设计,我也就知道这一个,哈哈。
以下为原文:
对于Java内部类,大家实际上了解不多。在这里我们以实际代码的形式,为大家详细介绍Java内部类在GUI设计的作用。
Java内部类其实 ......
JAVA相关基础知识
1、面向对象的特征有哪些方面
2、String是最基本的数据类型吗?
3、int 和 Integer 有什么区别
4、String 和StringBuffer的区别
5、运行时异常与一般异常有何异同?
6、说出Servlet的生命周期,并说出Servlet和CGI的区别。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
8、EJB是基于哪些 ......
Socket传输模式
Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序和他们出发时的顺序时相同.无连接的sockets操作就像是个邮件投递,,没有什么确保,多个邮件可能在到达时的顺序和出发时的顺序不相同.
到底用哪种模式是邮应 ......
java.applet 提供创建Applet的类以及用于Applet和Applet上下文(Applet Context)通信的类。
java.awt 包含所有创建用户接口(界面)、绘制图像的类。
java.awt.color 提供颜色空间的类
java.awt.datatransfer 提供应用内和应用间传输数据的接口和类。
java.awt.dnd 拖拽功能支持类库(拖拽是在许多GUI提供的一种在两个 ......