zoukankan      html  css  js  c++  java
  • 【基础算法】- 堆排序

    public class HeapSort {
    
    	public static void main(String[] args) {
    		
    		HeapSort sort = new HeapSort();
    		int[] a = {2,4,3,1,0,9,5,6,3,7};
    		sort.sort(a);
    		for(int i = 0 ; i < a.length ; i++){
    			System.out.println(a[i]);
    		}
    	}
    	
    	private void maxHeapify(int[] a,int i,int length){
    		
    		int left = left(i);
    		int right = right(i);
    		int max = a[i];
    		int index = i;
    		if(left < length && max < a[left]){
    			max = a[left];
    			index = left;
    		}
    		if(right < length && max < a[right]){
    			max = a[right];
    			index = right;
    		}
    		if(index != i){
    			a[i]^=a[index]; a[index]^=a[i]; a[i]^=a[index];
    			maxHeapify(a,index,length);
    		}
    	}
    	
    	private void buildMaxHeap(int[] a){
    		
    		for(int i = a.length / 2 - 1 ; i >= 0 ; i--){
    			maxHeapify(a,i,a.length);
    		}
    	}
    	
    	private void sort(int[] a){
    		
    		buildMaxHeap(a);
    		for(int i = a.length - 1 ; i >= 0 ; i--){
    			if(i != 0){
    				a[i]^=a[0]; a[0]^=a[i]; a[i]^=a[0];
    			}
    			maxHeapify(a,0,i);
    		}
    	}
    	
    	private int left(int i){
    		return i*2;
    	}
    	
    	private int right(int j){
    		return j*2+1;
    	}
    }
    
  • 相关阅读:
    php 微信调用扫一扫
    JavaSE常用API
    Java中的异常处理
    Java实现多态的机制是什么?
    JavaSE(下)
    JavaSE语法(中)
    JavaSE语法
    Java面向对象
    Java零基础入门之常用工具
    Java抽象类、接口、内部类
  • 原文地址:https://www.cnblogs.com/lixusign/p/3352463.html
Copyright © 2011-2022 走看看