• 最大堆


    二叉堆:

      堆排序时间复杂度O(nlgn)

     1 package com.bing;
     2 
     3 import java.util.Arrays; 
     4 //ywb
     5 public class HeapSort {
     6     
     7     
     8     //首先假设 以left(i) ,right(i) 为根节点的子树满足最大堆性质
     9     public static  <T extends Comparable<? super T>> void  max_HeapIf_Y(T[] A,int i,int heapSize)
    10     {
    11         int l=left(i),r=right(i),largest;
    12         if(l<=heapSize && A[i].compareTo(A[l])<0)
    13         {
    14             largest = l;
    15         }else
    16         {
    17             largest = i;
    18         }
    19         if(r<=heapSize && A[largest].compareTo(A[r])<0)
    20         {
    21             largest = r;
    22         }
    23         if(largest!=i)
    24         {
    25             exchange(A,i,largest);
    26             max_HeapIf_Y(A,largest,heapSize);
    27         }
    28         
    29     }
    30     
    31     public static <T extends Comparable<? super T>> void build_max_heap(T[] A,int heapSize) 
    32     {
    33         
    34         for(int i=A.length/2;i>=0;i--)
    35         {
    36             max_HeapIf_Y(A,i,heapSize);
    37         }
    38     }
    39     
    40     public static <T extends Comparable<? super T>> void heapSort(T[] A) 
    41     {
    42         build_max_heap(A,A.length-1);
    43         int heapSize = A.length-1;
    44         for(int i=A.length-1;i>=1;i--)
    45         {
    46             exchange(A,0,i);
    47             heapSize--;
    48             max_HeapIf_Y(A,0,heapSize);
    49         }
    50     }
    51     public static void main(String[] args) {
    52         Integer[] a = {8,9,6,3,7,0,2,15,-1,8,8,28,4,0,45,78,22
    53                 ,2000,3243,4,0,4,4,48,3,33,55,11,22,9};
    54         System.out.println(Arrays.toString(a));
    55         long start = System.nanoTime();
    56         heapSort(a);
    57         long end = System.nanoTime();
    58         System.out.println(Arrays.toString(a));
    59         System.out.println(end - start);
    60         
    61     }
    62     public static int left(int i)
    63     {
    64         return 2*i+1;    
    65     }
    66     public static int right(int i)
    67     {
    68         return 2*i+2;    
    69     }
    70     public static int parent(int i)
    71     {
    72         return i/2;    
    73     }
    74     public static <T> void exchange(T[] A,int i,int j){
    75         T temp = A[i];
    76         A[i] = A[j];
    77         A[j] = temp;
    78     }
    79     
    80 }

     

    When things go wrong,don't go with them.
  • 相关阅读:
    UI设计教程分享:banner设计
    UI设计教程分享:电商网页页面设计常见表现手法
    UI设计教程学习分享:APP布局
    UI设计技术分享:教你几个设计技巧让老板对你的设计赞不绝口
    ps教程分享:一定要记住这20种PS技术!
    UI设计教程分享:设计一个高质量的logo要从哪方面入手呢?
    UI设计教程分享:字体变形—阴阳收缩法
    实验十一_编写子程序
    课程设计一总结
    课程设计一
  • 原文地址:https://www.cnblogs.com/yqy921/p/5571161.html
Copyright © 2020-2023  润新知