-
堆是像二叉樹一樣組織的元素序列。 每個堆元素對應乙個樹節點。 第乙個值順序 [first.
finally) 在根目錄中,謂詞按順序排序。例如,如果謂詞較大,則堆中的每個元素都滿足以下條件; 並且每個元素都大於或等於父元素。 最小的元素儲存在根目錄中,所有子元素都以逐漸較大的值儲存。
make heap 函式將 [最後乙個範圍首先] 轉換為堆。
排序堆函式是使用 make heap 函式建立的,用於排序"堆積。
推送堆函式在堆中插入乙個新值。
pop 堆函式由 [first, last] 交換,指定堆中的第乙個和最後乙個元素,然後減少上乙個還原堆屬性序列的長度。
例如,數字
之後,呼叫 make heap
numbers
之後,呼叫排序堆
numbers
之後,呼叫 push heap()
numbers
之後,pop 堆被呼叫
numbers
-
你把問題說得更清楚嗎? 我不明白你的意思? make heap,push heap的原始碼?
-
你把陣列的下標儲存到乙個臨時陣列中,在對原有陣列進行排序的同時,也對臨時陣列進行同樣的交換,當目標陣列排序時,你的下標陣列自然會被安排好。 如果你需要**+20分,我會寫給你,這是最簡單的方法。
-
我遲到了,雨落在深山裡是一種簡單易用的方法。
-
雨水落入深山非常有用。
-
這取決於您擁有的數字和陣列元素的數量。
如果數字不是太大,並且陣列沒有很多元素,則可以使用移位計算。
如果陣列元素很大或具有多個元素,請使用二維陣列或結構。
二維陣列的第一行是原始陣列,第二行是有序數。
例如,a[2][n] 的陣列,其中 a[0] 是原始陣列 a[1] 的編號。
當我交換時,我想要它。
int ntemp;
for (int i=0;ia[0][j])
排列完後,可以輸出a[1],上面的排序只是為了說明也可以切換到更快的方法。
結構相同,有兩個元素,乙個是數值,另乙個是數字。
原理很簡單,基本和上面一樣,就不多說了)
但是,在 C++ 中,如果 32 位計算機的 int 為 4 個位元組,則大多數數字不會超過大小,因此您可能需要此值。
您的陣列是 int na[n]; 乙個不超過 256 個元素的陣列,元素的數值大小不超過 2 23
或不超過 65,536 個元素,值介於 -32767 和 32768 之間。
為了方便起見,我只說不超過256個元素,元素的數值大小不大於2 23,而後者和這個一樣,你可以直接改變它(0=-2 23可以這樣)。
注意:此方法不支援重複數字的隨機輸出,也就是說,如果您有兩個相同的數字,則第乙個將始終排在第一位。
for(int i=0;ina[j])
然後是輸出,你可以做(只有最後 8 位)。
for(int i=0;ICOUT<<(NA[i]&0xff)
-
鏈堆以相反的順序輸出兩個迴圈就可以了。
#ifndef stack_h_
#define stack_h_
const int null=0;
enum error_code ;
template
struct node
template
node::node()
template
node::node(t item,node*add_on)template
class stack
template
stack::stack()
template
stack::~stack()
template
stack::stack(stack &item)else
topnode=newtop;
template
error_code stack::push(t item)template
error_code stack::pop()template
template
bool stack::empty()
#endif
-
for(i = 7;i >= 0;i--) 沒有任何其他變數定義。
你也可以根據你的想法定義乙個j
int j;
for(i = 7,j = 8;i >= 0;i--)for(i = j; i >=0; i --b[i] = a[i];
-
明明可以直接填num,為什麼要折騰這個?。。。
-
修改如上!
while迴圈有點問題,new之後需要刪除,main需要返回。 基本上就是這樣......