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

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

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

堆排序順序存儲(升序)

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

二:首先堆是一棵全完二叉樹:

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

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

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

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

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

代碼實現(xiàn):

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

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

相關(guān)文章

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

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

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

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

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

    C語言實現(xiàn)簡易版掃雷的完整過程

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

    C++對象與繼承使用中一些問題介紹

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

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

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

    詳解C語言實現(xiàn)空間索引四叉樹

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄獪\談C語言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09

最新評論

翁牛特旗| 万年县| 棋牌| 济南市| 田林县| 旬阳县| 平塘县| 西乌| 景宁| 城市| 丹棱县| 阿克陶县| 磐石市| 青冈县| 大名县| 镇安县| 木兰县| 新竹市| 凤凰县| 温宿县| 宿松县| 蒲城县| 珲春市| 永胜县| 湘阴县| 孟村| 富裕县| 封丘县| 昌吉市| 邢台县| 昭觉县| 正定县| 石楼县| 江都市| 大悟县| 获嘉县| 麻江县| 峨眉山市| 香港 | 乡城县| 兴海县|