zoukankan      html  css  js  c++  java
  • 堆排序

    package com.bupt.acm;
    
    import java.util.Scanner;
    
    public class HeapSort {
    
        private int getLeft(int i){
        
            return 2*(i+1)-1;
        }
        private int getRight(int i){
            return 2*(i+1);
        }
        public void heapSort(int[] numb){
            int length=numb.length;
            int size=length;
            //根据数组建堆
            for(int i=length/2;i>=0;i--){
                buildMinHeap(numb,i,size);
            }
            //将最小值移到最后元素并调整
            int tmp=0;
            for(int i=size-1;i>=0;i--){
                tmp=numb[0];
                numb[0]=numb[i];
                numb[i]=tmp;
                buildMinHeap(numb, 0,i);
            }
        }
        private void buildMinHeap(int[] numb,int i,int length){
            int largest=i;
            int left=getLeft(i);
            int right=getRight(i);
            
            if(left<length&&numb[largest]<numb[left]){
                largest=left;
            }
            if(right<length&&numb[largest]<numb[right]){
                largest=right;
            }
            if(largest==i){
                return;
            }else{
                int tmp=numb[i];
                numb[i]=numb[largest];
                numb[largest]=tmp;
                buildMinHeap(numb, largest,length);
            }
        }
        private void buildMaxHeap(int[] numb, int i,int length) {
            // TODO Auto-generated method stub
            int largest=i;
            int left=getLeft(i);
            int right=getRight(i);
            
            if(left<length&&numb[largest]>numb[left]){
                largest=left;
            }
            if(right<length&&numb[largest]>numb[right]){
                largest=right;
            }
            if(largest==i){
                return;
            }else{
                int tmp=numb[i];
                numb[i]=numb[largest];
                numb[largest]=tmp;
                buildMaxHeap(numb, largest,length);
            }
        }
        public static void main(String[] args){
            int[] result=null;
            int n=0;
            Scanner scanner=new  Scanner(System.in);
            HeapSort heapSort=new HeapSort();
            while(scanner.hasNext()){
                n=scanner.nextInt();
                result=new int[n];
                for(int i=0;i<n;i++){
                    result[i]=scanner.nextInt();
                }
                heapSort.heapSort(result);
                for (int i = 0; i < result.length; i++) {
                    System.out.print(result[i]+" ");
                }
                System.out.println();
            }
        }
    }

  • 相关阅读:
    ELF文件格式解析
    了解ELF文件类型
    汇编程序-简介
    汇编指令入门级整理
    双系统: Windows10时间快和Ubuntu时间差问题
    iDRAC on DELL Server
    ubuntu WIFI 连接不稳定(wifi无法连接问题)
    删除字符串中的空格(空字符)
    VBS 基础知识
    VBS 操作Excel的常用方法
  • 原文地址:https://www.cnblogs.com/csxf/p/3739224.html
Copyright © 2011-2022 走看看