最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(chǔ)(升序)

 更新時(shí)間:2017年05月22日 10:03:52   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(chǔ)(升序)的相關(guān)資料,需要的朋友可以參考下

堆排序順序存儲(chǔ)(升序)

一: 完全二叉樹(shù)的概念:前h-1層為滿二叉樹(shù),最后一層連續(xù)缺失右結(jié)點(diǎn)!

二:首先堆是一棵全完二叉樹(shù):

a:構(gòu)建一個(gè)堆分為兩步:⑴創(chuàng)建一棵完全二叉樹(shù)      ⑵調(diào)整為一個(gè)堆

(標(biāo)注:大根堆為升序,小根堆為降序)

   b:算法描述:①創(chuàng)建一棵完全二叉樹(shù)  

②while(有雙親){
A:調(diào)整為大根堆;
B:交換根和葉子結(jié)點(diǎn);
C:砍掉葉子結(jié)點(diǎn);
}

  c:時(shí)間復(fù)雜度為 O(nlogn)  ,空間復(fù)雜度為 O(1), 是不穩(wěn)定排序!

代碼實(shí)現(xiàn):

/*堆排序思想:[完全二叉樹(shù)的定義:前 h-1 層為滿二叉樹(shù)一最后一層連續(xù)缺失右結(jié)點(diǎn)(即右子女)],(大根堆升序排序,小根堆降序排列) 
  首先堆是一個(gè)完全二叉樹(shù) ,根據(jù)數(shù)組下標(biāo)就可建成了一棵完全二叉樹(shù) 
  其次:while(有雙親){ 
    A: 調(diào)整為一個(gè)大根堆         【Adjust()函數(shù)實(shí)現(xiàn)】 
    B: 交換最后一個(gè)葉子結(jié)點(diǎn)和根結(jié)點(diǎn)    【Swap()函數(shù)實(shí)現(xiàn)】 
    C: 砍掉最后一個(gè)葉子結(jié)點(diǎn)      【即元素個(gè)數(shù) n--】 
  } 
*/ 
 
#include <iostream> 
#define N 100 
 
using namespace std;  
 
int b[N]={0};    //存儲(chǔ)數(shù)據(jù)的數(shù)組  
int n=0;      //記錄數(shù)據(jù)的總個(gè)數(shù)【0單元不要,實(shí)際元素個(gè)數(shù)為(n-1)個(gè)】 
 
void Swap(int *x,int *y){ 
  int t; 
  t=*x; 
  *x=*y; 
  *y=t; 
}  
 
void Adjust(){ 
  int p;         //記錄雙親結(jié)點(diǎn)  
  int tag=1;       //記錄是否已經(jīng)調(diào)整為大根堆(標(biāo)志性的變量) 
  while(tag){       //判斷是否已經(jīng)調(diào)整好為大根堆 
    p=(n-1)/2;     //最后一個(gè)雙親結(jié)點(diǎn)的下標(biāo) 
    tag=0;       //凡是交換后,tag=1,標(biāo)志著還沒(méi)有調(diào)整為大根堆,否則繼續(xù)調(diào)整  
    while(p>0){     //確保有雙親結(jié)點(diǎn) 
      if(b[p]<b[2*p]){     //若根結(jié)點(diǎn)大于左子女結(jié)點(diǎn),就交換  
        Swap(&b[p],&b[2*p]); 
        tag=1; 
      } 
      if(2*p+1<n && b[p]<b[2*p+1]){ //若存在右子女,并且根結(jié)點(diǎn)大于右子女結(jié)點(diǎn),就交換  
        Swap(&b[p],&b[2*p+1]); 
        tag=1;      
      } 
      p--;        //直到最后一個(gè)雙親結(jié)點(diǎn)調(diào)整完  
    }  
  }  
} 
 
void HeapSort(){ 
  while(n>2){         //保證有雙親結(jié)點(diǎn)  
    Adjust();        //調(diào)整大根堆函數(shù) 
    Swap(&b[1],&b[n-1]);  //將最后一個(gè)葉子結(jié)點(diǎn)和根結(jié)點(diǎn)交換  
    n--;          //裁剪最后的葉子結(jié)點(diǎn)  
  } 
}   
    
int main(void){ 
  int i,m; 
  cout<<"請(qǐng)輸入數(shù)據(jù)的總數(shù)【0單元不要,實(shí)際元素個(gè)數(shù)為(n-1)個(gè)】:"<<endl; 
  cin>>n; 
  m=n; 
  cout<<"請(qǐng)輸入各個(gè)數(shù)據(jù)【0單元不要,實(shí)際元素個(gè)數(shù)為(n-1)個(gè)】:"<<endl; 
  b[0]=0; 
  for(i=1;i<n;i++){ 
    cin>>b[i]; 
  } 
  HeapSort();           //堆排序 
  cout<<"大根堆升序排列為:"<<endl; 
  for(i=1;i<m;i++){ 
    cout<<b[i]<<" "; 
  }  
  cout<<endl; 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++ Qt開(kāi)發(fā)之使用QTcpSocket實(shí)現(xiàn)TCP網(wǎng)絡(luò)通信

    C++ Qt開(kāi)發(fā)之使用QTcpSocket實(shí)現(xiàn)TCP網(wǎng)絡(luò)通信

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,本文主要為大家介紹了如何運(yùn)用QTcpSocket組件實(shí)現(xiàn)基于TCP的網(wǎng)絡(luò)通信功能,需要的可以參考下
    2024-03-03
  • C語(yǔ)言實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)操作

    C語(yǔ)言實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)操作

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷的完整過(guò)程

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷的完整過(guò)程

    這篇文章主要給大家介紹了關(guān)于利用C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)易版掃雷的完整過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++對(duì)象與繼承使用中一些問(wèn)題介紹

    C++對(duì)象與繼承使用中一些問(wèn)題介紹

    大家好,本篇文章主要講的是C++對(duì)象與繼承使用中一些問(wèn)題介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解

    C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解

    下面小編就為大家?guī)?lái)一篇C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 詳解C語(yǔ)言實(shí)現(xiàn)空間索引四叉樹(shù)

    詳解C語(yǔ)言實(shí)現(xiàn)空間索引四叉樹(shù)

    本文主要介紹了用C語(yǔ)言實(shí)現(xiàn)四叉樹(shù),對(duì)算法感興趣的同學(xué),可以參考下,并且試驗(yàn)一下。
    2021-05-05
  • C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除)

    C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除)

    本文主要介紹了C++使用cjson操作Json格式文件(創(chuàng)建、插入、解析、修改、刪除),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化

    詳解C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化

    這篇文章主要介紹了C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • win32使用openfilename瀏覽文件窗口示例

    win32使用openfilename瀏覽文件窗口示例

    這篇文章主要介紹了使用win32 API打開(kāi)瀏覽文件窗口,使用OPENFILENAME結(jié)構(gòu)體來(lái)實(shí)現(xiàn)這個(gè)功能,需要的朋友可以參考下
    2014-02-02
  • C語(yǔ)言函數(shù)棧幀解析

    C語(yǔ)言函數(shù)棧幀解析

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09

最新評(píng)論

麦盖提县| 玉树县| 巴南区| 扎赉特旗| 长沙县| 融水| 宜章县| 任丘市| 鹿泉市| 大英县| 汕头市| 原阳县| 绥宁县| 三亚市| 盖州市| 盱眙县| 启东市| 项城市| 聂拉木县| 大化| 弥渡县| 安平县| 卢龙县| 永靖县| 宁城县| 石柱| 镇平县| 丽江市| 桐柏县| 津南区| 永仁县| 云霄县| 孝义市| 遂平县| 聂荣县| 左贡县| 温泉县| 保亭| 星座| 巫山县| 台南市|