zoukankan      html  css  js  c++  java
  • 数据结构之排序算法Java实现(2)——选择类排序之堆排序算法

    这个文章旨在存代码,看了很多网上写推排序的算法,感觉写的过于臃肿,我去努力地理解了思想,自己写的,有什么问题欢迎指正。

    首先是升序排序,这个要建小顶堆,Java代码如下:

    public <T extends Comparable<? super T>> void sortByAsc(T[] data) {
    		heapSortByAsc(data,data.length);
    		
    	}
    
    	private <T extends Comparable<? super T>> void heapSortByAsc(T[] data, int length) {
    		if(length == 0)
    			return;
    		//建堆
    		for(int i = length/2 -1 ; i >= 0;i--){
    			if(data[i].compareTo(data[2 * i]) < 0 ){
    				swap(data,i,2*i);
    			}
    			if(data[i].compareTo(data[ 2*i + 1]) < 0){
    				swap(data,i,2*i+1);
    			}
    		}
    		//将堆最后一个跟根节点交换
    		swap(data,0,length -1);
    		//递归
    		heapSortByAsc(data,length - 1);
    		
    	}
    

      下面的是降序排序,需要建大顶堆:

    public <T extends Comparable<? super T>> void sortByDesc(T[] data) {
    		heapSortByDesc(data,data.length);
    		
    	}
    	private <T extends Comparable<? super T>> void heapSortByDesc(T[] data, int length) {
    		if(length == 0)
    			return;
    		//建堆
    		for(int i = length/2 -1 ; i >= 0;i--){
    			if(data[i].compareTo(data[2 * i]) > 0 ){
    				swap(data,i,2*i);
    			}
    			if(data[i].compareTo(data[ 2*i + 1]) > 0){
    				swap(data,i,2*i+1);
    			}
    		}
    		//将堆最后一个跟根节点交换
    		swap(data,0,length -1);
    		//递归
    		heapSortByAsc(data,length - 1);
    		
    	}
    

      最后是交换的程序,很简单;

    public <T extends Comparable<? super T>> void swap(T[] data, int i, int j) {  
        	T temp = data[i];
    		data[i] = data[j];
    		data[j] = temp; 
        } 
    

      

  • 相关阅读:
    高级指令(三)
    高级指令(二)
    高级指令(一)
    高级指令(四)
    基础指令(二)
    02使用Maven构建Java项目
    03初识Maven核心概念(上)
    01Maven概述与安装
    关于sizeof与#pragma pack 以及网络上关于字节对齐的一点感想
    学习之"setjmp和longjmp函数"
  • 原文地址:https://www.cnblogs.com/Gabby/p/6522834.html
Copyright © 2011-2022 走看看