java 建立最大堆

來源:互聯網
上載者:User

標籤:

最大堆的性質是除了根節點之外的所有節點(i)都需要滿足A[PARENT(i)]>A[i],即其對應節點值小於其父節點對應值。

下面實現以數組int []a構建最大堆。

 

 

public class Heap {
public static int Left(int i)//返回左子結點
{return 2*i+1;}

public static int Right(int i)//返回右子節點
{return 2*i+2;}

public static void Max_Heapify(int []a,int i)//以數組a 和i為參數   i為數組內座標
{
int left=Heap.Left(i);
int right=Heap.Right(i);
int most;//記錄最大值的數組下標
int heapSize=a.length;
if((left<heapSize)&&(a[left]>a[i]))//判斷left<heapSize 是為了判斷left是否溢出數組
most=left;
else
most=i;
if((right<heapSize)&&(a[right]>a[most]))//!注意不是>a[i]  此處為了判斷出 a[i]a[left]a[right]最大值
most=right;

if(most!=i)
{
Heap.swap(a, i, most);//交換 a[i]和a[most]
Max_Heapify(a,most);//交換完之後 遞迴調用  確保交換後的a[most]滿足 A[PARENT(i)]>A[i]
}

}
public static void swap(int []a,int i,int j)//交換函數
{

int swap=a[i];
a[i]=a[j];
a[j]=swap;
}

public static void build_Max_Heap(int []a)//以數組int[]a為參數調用
{
for(int i=a.length/2;i>=0;i--)//從i=a.length/2開始調用Max_heapify()函數,因為 i>a.length/2的節點沒有子節點。
{
Heap.Max_Heapify(a, i);
}

 

}

public static void main(String[] args) {
int []a={1,2,3,4,5,6,7};
Heap.build_Max_Heap(a);
for(int p:a)
System.out.println(p);//輸出函數
}

}

 

輸出:

7
5
6
4
2
1
3

總結:int []a={1,2,3,4,5,6,7}

初始時可以看為

  1.     開始從i=(a.length/2)=7/2=3開始,a[3]=4,無子節點 i--;
  2. i此時為2,a[2]=3.    left[i]= 6,right[i]=7,a[most]=7,交換 3,7 得,之後還要對3遞迴判斷 Max_Heapify(a,most);發現3符合其所在位置,i--.
  3. 此時i=1,a[1]=2,left[i]=4,right[i]=5,a[most]=5,交換2 ,5得之後還要對2遞迴判斷 Max_Heapify(a,most);發現2符合其所在位置,i--.
  4.  i=0;a[0]=1,left[i]=5,right[i]=7,a[most]=7,交換1,7得,之後還要對1遞迴判斷 Max_Heapify(a,most);發現1 6 3 中6最大 所以 1 6 交換位置得

所以int[]a現在為{7,5,6,4,2,1,3},與輸出相同。

 

如果該文章有任何錯誤,歡迎大家指正,謝謝。

 

java 建立最大堆

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.