java语言实现堆排序

package secondChapter;

import java.util.Random;

public class HeapSort {

    private static int AHeapSize;

    public static void main(String[] args) {

        HeapSort hs = new HeapSort();
        int[] A = new int[10];
        //产生随机数组
        for(int i=0;i<A.length;i++){
            A[i] = hs.generateRandomInt(50);
        }
        System.out.print("Original array:");
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i]+" ");
        }
        System.out.println();

        hs.heap_sort(A);

        System.out.print("Sorted array: ");
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i]+" ");
        }
    }

    //HEAPSORT过程
    public void heap_sort(int[] A) {
        AHeapSize = A.length;
        build_max_heap(A);

        System.out.print("build_max_heap: ");
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i]+" ");
        }
        System.out.println();

        for(int i=A.length;i>1;i--){
            int temp = A[0];
            A[0] = A[i-1];
            A[i-1] = temp;

            AHeapSize -= 1;
            max_heapify(A,1);
        }
    }

    //HUILD-MAX-HEAP过程
    public void build_max_heap(int[] A) {
        for(int i=A.length/2;i>0;i--){
            max_heapify(A,i);
        }
    }

    //MAX-HEAPIFY过程
    public void max_heapify(int[] A, int i) {    //i为 元素下标+1
        int l = 2*i;
        int r = 2*i+1;

        int largest;
        if(l<=AHeapSize && A[l-1]>A[i-1]){
            largest = l;
        }else{
            largest = i;
        }
        if(r<=AHeapSize && A[r-1]>A[largest-1]){
            largest = r;
        }
        if(largest!=i){
            int temp = A[i-1];
            A[i-1] = A[largest-1];
            A[largest-1] = temp;

            max_heapify(A, largest);
        }
    }

    private Random rd = new Random();
    public int generateRandomInt(int bound) {
        return rd.nextInt(bound);
    }

}

输出结果:

Original array:40 44 11 43 25 0 7 14 34 14
build_max_heap: 44 43 11 40 25 0 7 14 34 14
Sorted array: 0 7 11 14 14 25 34 40 43 44

时间: 2024-10-27 08:21:07

java语言实现堆排序的相关文章

java语言概念及特点相关问题

1 .什么是计算机语言? 计算机语言:指人与计算机之间的通信,主要由一些指令组成,指令包括"数字.符号和语法等内容",程序员可以通过这些指令来指挥计算机工作. 计算机语言的种类可以分为以下三类: ①机器语言:由二进制的0和1组成的编码,不便于记忆和识别(用于计算机识别). ②汇编语言:采用了英文缩写的标识符,容易识别与记忆. ③高级语言:采用接近于人类的自然语言进行编程,进一步简化了程序编写的过程. Java是一种高级计算机语言. 2.Java语言的特点? "java程序语言

java语言编程基础

java语言基本要素 高级语言如c++.c#.java等都有一些共同性的东西:关键字.标识符. 运算符.注释.数据类型.常量和变量.语句.函数.数组.高级语言在这些要素上大同小异. Java关键字:一些有特定含义,有专门用途的字符串(keyword).Java中关键字均为小写.如do while if int等.不需要记,用多了自然会知道. 标识符 自定义的名称.如类名.变量名.方法名等.合法标识符规则:1 不可使用关键子字 2 不能以数字开头.在java中标识符可有26个英文大小写字母.数字0

Java语言

Java第一次亮相是在1994年由Sun公司技术总监JohnGage提出这个概念,96年正式推广第一个版本jdk1.0,到现在常用的有1.6和被oracle收购后发布的1.7版本. Java语言特点:相对C++语言更加通俗易懂,更没有指针,Java可以在任何一个平台操作系统上运行,程序员只需要编写程序一次就行,Java具有开源.伸缩性.扩展性.同时Java采用多线程可以让程序同步做多个任务. 语言运行方式:创建.java文件--通过javac编译文件生成.class文件在通过jvm虚拟机转换成二

对Java语言中包、修饰符、封装的一些总结

一.包(packsge)   1.包的概念 物理上是文件夹 逻辑上是有逻辑关系的集合   2.包的作用 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用: 包可以避免名字冲突.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类.   3.包(package)的命名规范 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,

java语言复制数组的四种方法

JAVA语言的下面几种数组复制方法中,哪个效率最高? B.效率:System.arraycopy > clone > Arrays.copyOf > for循环 1.System.arraycopy的用法: [java] view plain copy public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 参数:src - 源数组.srcPos - 源数组中的起

java语言基础001

1.java程序的基本结构大体上可以分为包.类.main()主方法.标识符.关键字.语句和注释等. 2.标识符和关键字区分大小写. 3.主方法是应用程序的入口点,java程序是从该方法开始执行的,main是主方法的名称,程序员不可以更改. 4.标识符 是一个名字,用来标识类名.变量名.方法名.数组名.文件名的有效字符序列. 5.标识符的命名规则: (1)java语言的标识符由字母.数字.下划线和美元符组成,第一个字符不能为数字. 非法:7word.5fox (2)java 语言使用Unicode

《Java语言程序设计》大作业报告 九宫格游戏

    <Java语言程序设计>大作业报告     中国石油大学(北京)2015 - 2016 学年第二学期     班级:_____计算机14-1_______ 姓名:_____  许 恺_________________ 学号:______2014011329___________     题意分析 程序首先需要九个可以移动的格子,大小相等,有字符串标示,其次要可以相应鼠标和键盘方向键的控制,可以自由移动,并且与此同时记录步数,最后在满足条件时弹出对话框并显示步数以及是否打破记录,关于打破

Java语言程序设计 上机实验5 异常

Java语言程序设计 上机实验5 实验目的: 理解异常的概念,掌握Java的异常处理机制.常见异常的捕获方法.自定义异常及其抛出和捕获方法. 实验内容: 常见异常的捕获: 编写一个程序,分别生成ArrayIndexOutOfBoundsException类型和NumberFormatException类型的异常:然后改写程序,对这两种类型的异常进行捕获并合理地处理. 另外,思考并回答问题:能否0同时抛出ArrayIndexOutOfBoundsException类型和NumberFormatEx

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断