最小堆的構建(C 實現) 演算法拾遺(1)

2021-07-25 04:30:30 字數 1268 閱讀 8961

現在開始想把平時遇到的零星的演算法都記錄在這個板塊裡,因為若是沒有平常的記錄而只是將曾經實現過的**爛在資料夾裡的話確實不是乙個很好的做法啊。畢竟這是筆記而非展示給那個平台下的報告,所以有的時候寫的隨便一點。有時演算法具體實現上的參考出處我也會做上注釋。

今天開始實現乙個最小堆,演算法較為簡單功能不算完善。我參考了c++實現堆、最大堆、最小堆 – 堆排序插入刪除操作 這個部落格的**。先直接貼上**吧。

#include

using

namespace

std;

template

class heap

heap(t* data ,int size);

~heap(){}

protected:

void shift_up(int cursor);

void shift_down(int start,int end);

private:

t* heap;

int _capicity;

int _size;

};template

heap::heap(t* data ,int size)

}template

void heap::push(t values)

template

t heap::pop()

template

void heap::shift_down(int start,int end) //下濾

else

break;

i=j;

j=j*2+1;

}heap[i]=temp; //重要,因為i已經過度到後面的j了,所以i的位置一直是空檔

}template

void heap::shift_up(int cursor) //上濾

j=i; //j獲得i的位置

i=(i-1)/2; //i向上迭代

}heap[j]=temp; //同上面的思路一樣,這次j是乙個空檔,只是保留了原i的資料

}template

void heap::show_heap()

cout

; heap h(test,(int)(sizeof(test)/sizeof(int)));

h.show_heap();

}

C 拾遺 C 虛函式實現原理

我們知道,與c語言相比,c 在布局和訪問時間上的額外開銷主要是由虛函式 virtual function 機制和虛繼承 virtual base class 機制引起的。在前面一篇文章中,我們從記憶體布局的角度入手,分析了虛繼承的實現原理,傳送門 從記憶體布局看c 虛繼承的實現原理。今天,我們來分析...

C拾遺(一)gdb的使用

gdb基本命令 命令 描述backtrace bt 檢視各級函式呼叫及引數 finish 連續執行到當前函式返回為止,然後等待命令 frame f 選擇棧幀 info i locals 檢視當前綻幀區域性變數 list l 列出源 接著上次的位置往下列,每次10行 list 行號 列出從第幾行開始的...

演算法拾遺 二分查詢遞迴非遞迴實現

本篇博文沒太多要說的,二分查詢非常easy,也是常見常考的查詢演算法,下面是遞迴非遞迴的實現。非遞迴實現 非遞迴實現,返回相應的序號 int binarysearch int arr,int len,int key return 1 遞迴實現 遞迴實現,返回相應的序號 int bsearch int...