堆排序:堆每一次deletemin的時間複雜度是o(logn),這看起很不錯,因為n次出堆也只需要o(nlogn)次。那我們是否可以每次出最小樹,這樣將陣列排序呢?如果忘記deletemin的實現,我們不妨再重新複習一下。佇列那些事兒當然可以!我們這就來實現一下!
int deletemin(priority_queue pq)
pq.elements[i]=lastone;
return
min;
}
堆排序演算法
如果我們每次進行deletemin操作,將min儲存到乙個陣列中,這樣n次之後就會得到乙個排好序的結果。這樣的壞處是要求乙個o(n)的額外陣列,這很明顯不如快排。
我們這裡有乙個小技巧,可以去掉這個額外陣列。
每次將最頂端的數字和最末端的數字交換,pq.size()- -,然後就可以利用原本的陣列來儲存這個結果(雖然是逆序的)
這個演算法稍微複雜了一些,這次的陣列更「正式」一些(回想一下,deletemin是乙個內部結構),下標0處包含著資料。
//i:從i處開始下濾
#define leftchild (i*2+1)
void perdown(int a,int i,int n)
a[i]=tmp;
}
也許這段**比較難以理解,但是現在綜合deletemin就比較簡單了,這個過程其實是在給a[i]尋找乙個合適的位置
void heapsort(int *a,int n)
}
就是那麼一樂
元旦假期,不經意間已過去了大半。因為雨水特別的多,所以也不太想出去啥轉,人也多,看著頭暈。那窩在家裡又能做些什麼呢?當然可以打牌 下棋 看書,但現在可能更多人喜歡選擇上網。上網如果不是打遊戲,其實也不能持久,有人說偷菜,這種事情一般都是利用公家的時間了,放假在家就沒啥意思了。有人說寫部落格,這個需要...
其實就是那麼回事
哥哥從北京回來了,終於我們還是一如既往的聊了很多,但是我冷血的對待了每次聊天內容。我想讓他看到 感到我的成長。不再是去年那個小孩,不開心就找他哭訴。本來以為他會一開始就很高興,看到我的成熟,他的失落讓我覺得自己真冷血無情。他儘管是替我高興我的成長,但是他覺得自己再沒有以前的價值了。或許有些東西就是這...
3D遊戲建模就是那麼簡單!
我們為什麼要學習3d建模?甚至對於旅遊業,3d網際網路也能夠起到推動的作用,一些世界名勝 雕塑 古董將在網際網路上以3d的形式來讓使用者體驗,這種體驗的真實震撼程度要遠超2d環境。以發展勢頭迅猛的電子商務為例,海量的商品需要在網際網路上展示,特殊化 個性化 真實化商品展示顯得尤為重要,但由於3d模型...