完全二叉樹:
1、除最後一層外,其他層結點數應該達到最大值。2、最後一層結點都連續集中在左側
二叉堆:
1、二叉堆是一顆完全二叉樹
2、最大堆:父結點的值總是不小於任何乙個子結點的值
3、最小堆:父結點的值總是不大於任何子結點的值
建立乙個二叉最大t堆
usintg建立乙個最小堆:system;
using
system.collections.generic;
using
system.text;
namespace
排序演算法
public maxheap() : this(10
)
public
intcount
}public
bool
isempty
}//插入乙個元素
public
void
insert(e e)
heap[n + 1] =e;
n++;
swim(n);
}public
e removemax()
return
max;
}public
e max()
else
}//下沉操作
private
void sink(int
k)
if(heap[k].compareto(heap[j]) >= 0
)
swap(k, j);
k =j;}}
//元素上游
private
void swim(int
k)
}private
void swap(int i, int
j)
private
void resetcapacity(int
newcapacity)
heap =newheap;
}public
override
string
tostring()
}"]");
return
res.tostring();}}
}
using堆排序:system;
using
system.collections.generic;
using
system.text;
namespace
排序演算法
public minheap() : this(10
)
public
intcount
}public
bool
isempty
}//插入乙個元素
public
void
insert(e e)
heap[n + 1] =e;
n++;
swim(n);
}public
e removemin()
return
min;
}public
e min()
else
}//下沉操作
private
void sink(int
k)
if (heap[k].compareto(heap[j]) <= 0
)
swap(k, j);
k =j;}}
//元素上游
private
void swim(int
k)
}private
void swap(int i, int
j)
private
void resetcapacity(int
newcapacity)
heap =newheap;
}public
override
string
tostring()
}"]");
return
res.tostring();}}
}
namespace上面堆排序的時間複雜度是o(n)排序演算法
for(int i = n -1; i >= 0; i--)}}
}
下面是用原地堆排序時間複雜度是o(logn)
namespace最大堆佇列排序演算法
for(int i = n -1; i >= 0; i--)}}
}
using最小堆佇列:system;
using
system.collections.generic;
using
system.collections.immutable;
using
system.runtime.compilerservices;
using
system.text;
namespace
排序演算法
public
maxpq()
public
int count }
public
bool isempty }
public
e dequeue()
public
void
enqueue(e e)
public
e peek()
public
override
string
tostring()}}
using優先對列使用場景:可以動態處理資料。system;
using
system.collections.generic;
using
system.collections.immutable;
using
system.runtime.compilerservices;
using
system.text;
namespace
排序演算法
public
minpq()
public
int count }
public
bool isempty }
public
e dequeue()
public
void
enqueue(e e)
public
e peek()
public
override
string
tostring()}}
優先佇列 二叉堆,堆排序
2.4 優先佇列 二叉堆 簡介 可以刪除最大元素和插入元素 特點 高效 對數級別的 刪除最大元素和插入元素操作 public class priorityheap public priorityheap int initsize 獲取最小的元素 public int min 刪除最小的元素 publ...
二叉堆 堆排序
堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。學習堆排序前,先講解下什麼是資料結構中的二叉堆。二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆...
二叉堆 堆排序
推薦 某cppblog wutianqi sblog 堆排序實現 include using namespace std 輸出當前堆的排序狀況 void printarray int data,int size 建堆 自底而上地呼叫maxheapify來將乙個陣列a 1.size 變成乙個最大堆 注...