前言因為是面對面試場景,所以原理什麼的就不講,網上一搜一大把,假設看到這篇部落格的人都會堆排序的原理了。
我就大概的用最簡單的**實現了下。畢竟面試這麼乙個水題寫半個小時也不太好吧。
實現中遇到的困難:
陣列下標必須要從0開始 0 對應左右節點:(1,2)
如果從1 開始 對應:(3,4), 2對應(5,6)那麼1 2 節點之間就沒有聯絡了,不太好。陣列下標必須要從0開始
#includeusing namespace std;
const int n=1e5+10;
int a[n],n,b[n];
void maxheadp(int a,int n,int id)//id id*2+1 id*2+2
}void headsort(int a,int n)
int id=0,len=n;
for(int i=len-1;i>=0;--i)
}int main()/*5
4 5 3 2 1
61 5 4 23 23 98
*/
手寫堆排序
堆排序是乙個不穩定排序但是其最好最壞的時間複雜度為nlogn。所謂的堆其實就是乙個完全二叉樹的結構其主要特點是所有的子樹中父節點一定大於子節點。堆排的主要思想是將序列構造成乙個大頂堆,堆頂一定是整個序列中最大值然後將最大值與最後乙個數值交換,之後又將剩下的n 1個元素構造成乙個大頂堆之後在依次向與之...
常見面試題手寫ArrayList
public class myarraylist 無參建構函式 public myarraylist 含參建構函式 public myarraylist int initialcapacity catch exception e elementdata new object initialcapac...
手寫堆排序 python
import numpy as np class heapsort object 這是堆中元素的個數 count 0 這是堆得最大容量 capacity 50 arr 0 capacity def init self pass def get capacity self return self.ca...