package algorithm;
public
class
heapsort
;
public
static
void
main
(string args)
private
static
void
buildmaxheapify
(int data)
}/**
*建立最大堆
**@paramdata
*@paramheapsize需要建立最大堆的大小,一般在sort的時候用到,因為最多值放在末尾,末尾就不再歸入最大堆了
*@paramindex當前需要建立最大堆的位置
*/private
static
void
maxheapify
(int data,int heapsize,int index)
}/**
*排序,最大值放在末尾,data雖然是最大堆,在排序後就成了遞增的
**@paramdata
*/private
static
void
heapsort
(int data)
}/**
*父節點位置
**@paramcurrent
*@return
*/private
static
intgetparentindex
(int current)
/***左子節點position注意括號,加法優先順序更高
**@paramcurrent
*@return
*/private
static
intgetchildleftindex
(int current)
/***右子節點position
**@paramcurrent
*@return
*/private
static
intgetchildrightindex
(int current)
private
static
void
print
(int data)
system.out.print(data[i]+"|");}}
/***以2為底的對數
**@paramparam
*@return
*/private
static
double
getlog
(double param)
}
package algorithm;
public
class
heapsort
;
public
static
void
main
(string args)
private
static
void
buildmaxheapify
(int data)
}/**
*建立最大堆
**@paramdata
*@paramheapsize需要建立最大堆的大小,一般在sort的時候用到,因為最多值放在末尾,末尾就不再歸入最大堆了
*@paramindex當前需要建立最大堆的位置
*/private
static
void
maxheapify
(int data,int heapsize,int index)
}/**
*排序,最大值放在末尾,data雖然是最大堆,在排序後就成了遞增的
**@paramdata
*/private
static
void
heapsort
(int data)
}/**
*父節點位置
**@paramcurrent
*@return
*/private
static
intgetparentindex
(int current)
/***左子節點position注意括號,加法優先順序更高
**@paramcurrent
*@return
*/private
static
intgetchildleftindex
(int current)
/***右子節點position
**@paramcurrent
*@return
*/private
static
intgetchildrightindex
(int current)
private
static
void
print
(int data)
system.out.print(data[i]+"|");}}
/***以2為底的對數
**@paramparam
*@return
*/private
static
double
getlog
(double param)
}
java實現堆排序
許多應用要用堆,比如,優先佇列,即佇列的擴充,佇列的每個元素增加乙個稱為優先順序的字段,優先佇列可以是線性結構的,但要有較高的效率,應把它組織成堆結構。元素入隊是,相當於執行堆的插入演算法 但在隊頭每次刪除的總是隊頂具有最大優先順序的元素,因此可以把它稱為最大優先順序佇列。再比如,堆排序是選擇排序中...
堆排序java實現
公升序用大根堆,降序用小根堆 調整堆 從根節點開始向下調整堆 先建立初始堆,從n 2 1 第乙個非葉子節點 節點開始,將之看做根節點,向下調整堆,到根節點結束 迴圈i from n 1 to 0,每次取出堆的最頂層根節點,即陣列下標為0,然後與節點i交換,這樣對於大根堆而言,最大值總是在後面,再從根...
Java 實現堆排序
堆排序主要是利用堆在根節點上的特性,既在大頂堆的情況下,堆的第乙個元素是堆當中最大的元素,而在小頂堆的情況下,堆的第乙個元素是最小的節點。所以在堆排序的過程,主要的操作就是對每次取出堆頂的元素之後 在這裡使用大頂堆 我們就選出了堆中的最大元素,然後對堆剩下的元素進行再次進行大頂堆的調正,得到乙個新的...