堆排序演算法總結

2021-10-05 08:42:37 字數 1613 閱讀 2199

堆排序的演算法可總結為建堆和插入調整2個步驟

一般在陣列儲存的條件下運算

其演算法框架大致如下

void

heapsort()

for(

int i=n;i>

1;i--

)}

void

downadjust

(int low,

int high)

//對陣列在[low,high]內調整

if(tempor[j]

> tempor[i]

)//交換下沉

else

}}

pat a 1098

題目如下

**如下

#include

#include

#include

using

namespace std;

const

int maxn =

111;

int origin[maxn]

,tempor[maxn]

,change[maxn]

;//原始陣列 原始陣列備份和目標陣列

int n;

//元素個數

bool

issame

(int a,

int b)

}return

true;}

void

print

(int a)

// 列印函式

}printf

("\n");

}bool

insertsort()

sort

(tempor,tempor+i+1)

;//從1開始的 所以加1 這裡用sort代替了插入排序 減小**量

if(flag ==

true

)return

true;}

return

false;}

void

downadjust

(int low,

int high)

//對陣列在[low,high]內調整

if(tempor[j]

> tempor[i]

)//交換下沉

else}}

void

heapsort()

for(

int i=n; i>

1; i--

)//調堆

swap

(tempor[1]

,tempor[i]);

downadjust(1

,i-1);

if(flag==

true

)//輸出下乙個序列}}

intmain()

for(

int i=

1;i<=n;

++i)if(

insertsort()

)else

heapsort()

;//堆排序

}system

("pause");

return0;

}

演算法總結 堆排序

在軟體設計相關領域,堆 heap 的概念主要涉及到兩個方面 堆排序的時間複雜度是o nlgn 與快速排序達到相同的時間複雜度.但是在實際應用中,我們往往採用快速排序而不是堆排序.這是因為快速排序的乙個好的實現,往往比堆排序具有更好的表現.堆排序的主要用途,是在形成和處理優先順序佇列方面.另外,如果計...

堆排序演算法 總結

最近面試,老是被問到堆排序演算法。回答時老是感覺思路不清楚,現在總結一下,把思路弄清楚的。1.堆排序是利用堆的特性對記錄序列進行排序的一種排序方法。好的那麼堆得特性是什麼呢?堆得定義 堆是滿足下列性質的數列 如下圖最開始是乙個小頂堆。當把97和13 交換後不是堆了,所以我們要調整根節點使之成為堆即篩...

堆排序演算法 總結

最近面試,老是被問到堆排序演算法。回答時老是感覺思路不清楚,現在總結一下,把思路弄清楚的。1.堆排序是利用堆的特性對記錄序列進行排序的一種排序方法。好的那麼堆得特性是什麼呢?堆得定義 堆是滿足下列性質的數列 如下圖最開始是乙個小頂堆。當把97和13 交換後不是堆了,所以我們要調整根節點使之成為堆即篩...