真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java堆排序是什么

這篇文章主要講解了“Java堆排序是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java堆排序是什么”吧!

樅陽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

  堆是指具有下列性質(zhì)的完全二叉樹     完全二叉樹 i的雙親是[i/2]

         根節(jié)點一定最大或者最小 !

         1 每個節(jié)點的值>=其左右節(jié)點的值   大頂堆

         2 每個節(jié)點的值<=其左右節(jié)點的值   小頂堆

        堆排序 Heap Sort  就是利用堆進行排序  如大頂堆。 將帶排序的數(shù)列構(gòu)造程一個大頂堆 然后將跟節(jié)點與堆數(shù)組末尾元素互換,然后將剩下的n-1個序列重新構(gòu)造成堆  往返進行。

堆排序(Heap Sort)只需要一個記錄元素大小的輔助空間(供交換用),每個待排序的記錄僅占有一個存儲空間。

堆的存儲

一般用數(shù)組來表示堆,若根結(jié)點存在序號0處, i結(jié)點的父結(jié)點下標(biāo)就為(i-1)/2。i結(jié)點的左右子結(jié)點下標(biāo)分別為2*i+1和2*i+2。

(注:如果根結(jié)點是從1開始,則左右孩子結(jié)點分別是2i和2i+1。)

如第0個結(jié)點左右子結(jié)點下標(biāo)分別為1和2。

如最大化堆如下:

Java堆排序是什么

左圖為其存儲結(jié)構(gòu),右圖為其邏輯結(jié)構(gòu)。

1.如何由一個無序序列建成一個堆?

2.如何在輸出堆頂元素之后,調(diào)整剩余元素成為一個新的堆?

        堆排序方法對記錄數(shù)較少的文件并不值得提倡,但對n較大的文件還是很有效的。因為其運行時間主要耗費在建初始堆和調(diào)整建新堆時進行的反復(fù)“篩選”上。

堆排序在最壞的情況下,其時間復(fù)雜度也為O(nlogn)。相對于快速排序來說,這是堆排序的最大優(yōu)點。此外,堆排序僅需一個記錄大小的供交換用的輔助存儲空間。

堆排的時間復(fù)雜度為O(n log n).    不穩(wěn)定 

#include 
#include 
using namespace std;

void HeapAdjust1(int a[], int pos, int n)//這個不太好理解
{
    int temp = a[pos];
    int child = 2*pos+1;
    while(child
void HeapAdjust(int a[], int pos, int n)
{
    int max = pos;
    int Left = 2*pos+1;
    int Right = 2*pos+2;
    if(pos<=(n-1)/2)
    {
        if(Left
}
void BuildHeap(int a[], int n)
{
    for(int pos=(n-1)/2;pos>=0; --pos)
    {
        HeapAdjust(a,pos,n);
    }
}
void HeapSort(int a[], int n)
{
    BuildHeap(a, n);
    for(int len = n-1;len>0; --len)
    {
        int temp = a[len];
        a[len] = a[0];
        a[0] = temp;
        HeapAdjust(a, 0, len);
    }
}
int main()
{
    int a[9] = {9,1,5,8,3,7,4,6,2};
    //ShellSort(a, 9);
    HeapSort(a, 9);
    for(int i=0;i<9;i++)
    {
        cout<

感謝各位的閱讀,以上就是“Java堆排序是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java堆排序是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


名稱欄目:Java堆排序是什么
文章地址:http://weahome.cn/article/jsiede.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部