数据结构之堆栈排序图文详解及代码(C++实现)
生活随笔
收集整理的這篇文章主要介紹了
数据结构之堆栈排序图文详解及代码(C++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼:
#include<iostream> using namespace std; #define MAXSIZE 20//順序表的最大長度 typedef int KeyType;//定義關鍵字類型為整型 typedef int InfoType; typedef struct {KeyType key;//關鍵字項InfoType otherinfo;//其他數據項 }RedType; typedef struct {RedType r[MAXSIZE+1];//r[0]閑置或做哨兵單元int length;//順序表的長度 }SqList;//順序表類型void HeapAdjust(SqList &L,int s,int m)//假設r[s+1..m]已經是堆,將r[s..m]調整為以r[s]為艮的大根堆 {RedType rc=L.r[s];for(int j=2*s;j<=m;j*=2)//沿key較大的孩子結點向下篩選{if(j<m&&L.r[j].key<L.r[j+1].key)++j;//j為key較大的記錄的下標if(rc.key>=L.r[j].key)//rc應插在位置s上break;L.r[s]=L.r[j];s=j;}//forL.r[s]=rc;//插入 }void CreatHeap(SqList &L)//把無序序列L.r[1..n]建成大根堆 {int n=L.length;for(int i=n/2;i>0;i--)HeapAdjust(L,i,n);//反復調用HeapAdjust }void HeapSort(SqList &L) {RedType x;CreatHeap(L);//把無序序列L.r[1..L.length]建成大根堆for(int i=L.length;i>1;--i){x=L.r[1];L.r[1]=L.r[i];L.r[i]=x;HeapAdjust(L,1,i-1);} }int main() {SqList L;for(int i=1;i<=10;i++)L.r[i].key=11-i;L.length=10;for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;HeapSort(L);for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;return 0; }運行結果:
總結
以上是生活随笔為你收集整理的数据结构之堆栈排序图文详解及代码(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法之选择排序图文详解及代码
- 下一篇: 数据结构之归并排序图文详解及代码(C++