堆排序的演算法可總結為建堆和插入調整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 交換後不是堆了,所以我們要調整根節點使之成為堆即篩...