堆排序
来源:互联网 发布:nginx加lua模块 编辑:程序博客网 时间:2024/06/04 19:59
package Sort;public class Heap_Sort { static int heap_length ; public static void main(String[] args) { int []a = {16,14,10,8,7,9,3,2,4,1}; int []b = new int [a.length+1]; for(int i =0;i<a.length;i++){ b[i+1] = a[i]; } a = b;// heap_length = a.length-1; ShowArray(a); HEAPSORT(a); ShowArray(a); } //显示数组 public static void ShowArray(int[]A){ for(int i=1;i<A.length;i++){ System.out.print(A[i]+" "); } System.out.println(); } public static int PARENT(int i){//返回父节点 return i/2; } public static int LEFT(int i){//返回左节点 return i*2; } public static int RIGHT(int i){//返回右节点 return i*2+1; } public static void MAX_HEAPIFY(int []A, int i){//堆的维护 int l = LEFT(i); int r = RIGHT(i); int largest; //比较父节点,左右子节点大小 if(l<= heap_length && A[l]>A[i]){ largest = l; }else{ largest = i; } if(r<=heap_length && A[r]>A[largest]){ largest = r; } //如果子节点比父节点大,则交换 if(largest != i){ int temp = A[i]; A[i] = A[largest]; A[largest] = temp; MAX_HEAPIFY(A, largest); } } /** * 建堆 * @param A */ public static void BUILD_MAX_HEAP(int []A){ heap_length = A.length-1; for(int i = heap_length/2;i>=1;i--){//维护最小父节点 MAX_HEAPIFY(A, i); } } public static void HEAPSORT(int []A){ BUILD_MAX_HEAP(A);//建堆 for(int i = heap_length;i>1;i--){ int temp = A[1]; A[1] = A[i]; A[i] = temp; heap_length--; MAX_HEAPIFY(A, 1); } }}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- CXTPReportView--VirtualList
- NS3系列—1———NS3中文教程:3下载及编译软件
- JavaScript的异步实现
- commons configuration 自动 reload 配置文件
- 关于opencv 图像掩膜操作srcImage.copyto(dstImage, mask)说明
- 堆排序
- MyBatis + Spring 基于SqlSessionDaoSupport的泛型基类
- 如何下载JDK(Java Development Kit)
- bootstrapNew
- Leetcode: Longest Substring Without Repeating Characters
- 手势事件:滑动动速度跟踪类VelocityTracker介绍
- centos7 复制移动删除
- 项目发布、启动Tomcat出错
- SVN CheckOut卡住