堆排序示例-java

package Heapsort;

public class TestMain
{
/**
* 调整堆
* @param array 数组
* @param i 调整的元素i
* @param length 堆元素个数
*/
public static void adaptationArray(int[] array,int i, int length)
{
// 当前元素
int cur = i;
while(2*cur+2<=length)
{
int curValue = array[cur];
int leftValue = array[2*cur+1];
int maxIndex;
if(2*cur+3<=length) //有右孩子节点
{
maxIndex = array[2*cur+2]>leftValue?2*cur+2:2*cur+1;
}
else
{
maxIndex = 2*cur+1;
}
//当前值大于左右节点值,则结束
if(curValue>=array[maxIndex])
{
break;
}
array[cur] = array[maxIndex];
array[maxIndex] = curValue;
cur = maxIndex;
}
}
/**
* 初始化最大堆
* @param array
*/
public static void initArray(int[] array)
{
//从start位置到0
int start = array.length/2-1;
for(;start>=0;start--)
{
adaptationArray(array,start,array.length);
}
}
/**
* 排序
* @param array
*/
public static void sortArray(int[] array)
{
//初始化最大堆
initArray(array);
int start = array.length-1; //依次将首元素与倒数的元素交换位置
for(;start>0;start--)
{
int temp = array[0];
array[0] = array[start];
array[start] = temp;
adaptationArray(array,0,start);
}
}

public static void main(String[] args)
{
int[] array ={20,23,6,7,3,4,5,100,29,1};
sortArray(array);
for(int i:array)
{
System.out.print(i+",");
}
}
}

时间: 2024-12-15 06:55:15

堆排序示例-java的相关文章

堆排序之Java实现

堆排序思想: 堆排序,顾名思义,就是基于堆.堆分为最大堆和最小堆,其实就是完全二叉树.最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解.有了上面的定义,我们可以得知,处于最大堆的根节点的元素一定是这个堆中的最大值.其实我们的堆排序算法就是抓住了堆的这一特点,每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为最大堆,依次类推,最终得到排序的序列. 或者说,堆排序将所有的待排序数据分为两部分,无序区和有序区.无

堆排序的java 实现

/* ***********完完整整的用堆排序来对一个序列进行排序 ************ * */ import java.util.Random; public class HeapSort { public static void main(String args[]){ int[] a = new int[1050]; InitList(a);//初始化 PrintList(a);//打印随机生成的序列 System.out.println();//打印一行空格,区分排序前还是排序后n

选择排序(直接选择排序、堆排序)——Java

选择排序 思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完. 关键问题:在剩余的待排序记录序列中找到最小关键码记录. 方法: –直接选择排序 –堆排序 (1)简单的选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 实现代码: public static void main(String[] args) { int[] n

希尔排序与堆排序(Java版)

希尔排序 package ShellSort; import Utils.SortUtils; public class Demo { public static void shellSort(int[] a){ int temp,j; int increment = a.length; do{ increment = increment/3+1;//如果是直接插入排序,这里的increment都为1. //System.out.println(increment); for (int i =

Appium入门示例(Java)

一.环境准备: 见我另一篇文章:http://www.cnblogs.com/puresoul/p/4696638.html 二.使用Eclipse直接创建案例工程 1.打开Eclipse,[File]-->[New]-->[Project] 2.选择[Java Project]-->[Next] 3.输入工程名称Appium_demo,点击[Finish] 4.右键点击工程 New-Folder,新建两个文件夹:apps和libs,目录结构如下:   三.导入测试的类库 1.导入Sel

快速上手代码示例 Java后台最新框架

A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安

快速排序示例-java

package Quicksort; /** * 快速排序 * @author Administrator * */public class TestMain { /** * * @param start 开始位置 * @param end 结束位置 */ public static void sortArray(int[] array,int start,int end) { if(start >= end) { return ; } int startIndex = start; int e

归并排序示例-java

/** * 归并两个有序表 * @param array * @param start 开始位置 * @param mid 第一个序列结束位置 * @param end 第二个序列结束位置 * @return */ public static void merge(int[] array,int start,int mid,int end) { int[] result = new int[end-start+1]; int aIndex = start; int bIndex = mid+1;

算法之冒泡排序(Java示例)

冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 动画示意 实现示例 Java 1 public class BubbleSortExample { 2 3 static void bubbleSort(int[] arr){ 4 int len =