現在開始想把平時遇到的零星的演算法都記錄在這個板塊裡,因為若是沒有平常的記錄而只是將曾經實現過的**爛在資料夾裡的話確實不是乙個很好的做法啊。畢竟這是筆記而非展示給那個平台下的報告,所以有的時候寫的隨便一點。有時演算法具體實現上的參考出處我也會做上注釋。
今天開始實現乙個最小堆,演算法較為簡單功能不算完善。我參考了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...