資料結構 佇列的堆排序

2021-08-20 10:43:52 字數 2372 閱讀 7336

佇列中的資料設為10個,這十個數用 srand(time(0));data=rand()%101;的方法取100以內的隨機數。

隨後進行堆排序。輸出堆排序過程中每個調整堆。

程式**如下(有點冗長,但是執行無誤):

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

#include"time.h"

//一定不要忘了用下角標啊aaaaaaa

int n=11;

typedef struct qnodeqnode,*qptr;

typedef structlinkqueue;

void initqueue(linkqueue &q) //建立乙個佇列 }

void adjust(linkqueue &q,int n) //堆調整

a=qp->data;

j=0;

qp=q.front;

while(j

b=qp->data;

j=0;

qp=q.front;

while(j<2*i)

c=qp->data;

if(a>max) max=a;

if(b>max) max=b;

if(c>max) max=c;

if(max==b)

qp->data=a;

j=0;

qp=q.front;

while(jnext;

j++;

} qp->data=b;

} if(max==c&&b!=max)

qp->data=a;

j=0;

qp=q.front;

while(jnext;

j++;

} qp->data=c;

} i--; }

} if(n%2==0) //如果n為偶數

a=qp->data;

j=0; qp=q.front; //找到k(2i+1) 的值

while(j

b=qp->data;

j=0; qp=q.front; //找到k(2i)的值

while(j<2*i)

c=qp->data;

if(a>max) max=a; //求出三者中最大值

if(b>max) max=b;

if(c>max) max=c;

if(max==b) //如果最大值為k(2i+1) 與ki交換值

qp->data=a;

j=0; qp=q.front;

while(jnext; j++;}

qp->data=b;

} if(b!=max&&max==c) //同上一步

qp->data=a;

j=0; qp=q.front;

while(jnext; j++;}

qp->data=c;

} i--;

}j=0; //最後將kn和k1進行比較

qp=q.front;

while(jnext;

j++;

} if(qp->data > q.front->next->data)}}

void sort(linkqueue &q,int n) //堆調整後的排序

printf("\n");

a=q.front->next->data; //將堆調整後的無序組的第乙個元素放入後面的有序組

qp=q.front;

while(inext;

i++;

} b=qp->data;

qp->data=a;

q.front->next->data=b;

if(n-1>1) //遞迴

sort(q,n-1);

}int main()

printf("\n");

sort(q,n);

qp=q.front;

printf("\n排序後的隊列為:\n");

while(qp!=q.rear)

return 0;

}

執行結果如下:

js資料結構 優先佇列 堆排序

優先佇列 優先佇列api class maxpq max 返回最大元素 delmax 刪除並返回最大元素 isempty 佇列是否為空 size 返回元素個數 堆 定義 在二叉堆中,每個元素都要保證大於等於另兩個特定位置的元素。當一棵二叉樹的每個節點都大於等於它的兩個子節點時,它被稱為堆有序。cla...

資料結構 堆排序 堆排序 Heap Sort

堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...

資料結構 堆排序

include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...