堆排序前不久,我們資料結構剛剛學習到,堆排序。個人覺得堆排序比較好,因為比較穩定的時間複雜度。n(logn) 時間複雜度。
如果想要學會堆排序,需要知道,二叉樹。堆就和二叉樹長的一模一樣。
下面說說堆排序:
堆排序的思想就是用到堆的特點, 大頂堆,小頂堆,簡單說,
大頂堆就是:這一棵完全二叉樹的任意乙個節點都滿足該節點的值大於等於
他的左右孩子節點,
小頂堆: 一棵完全二叉樹的任意乙個節點都滿足該節點的值小於等於
他的左右孩子節點,
因為這棵樹的根節點是這棵樹(堆) 中,如果是大頂堆就是max,小頂堆就是min,
比如我已大頂堆為例講一下,大頂堆的個人根節點是最大值,只需要將根節點與最後乙個數換一下,然後,把最後乙個數除開不看,剩下的n-1個數字也是一棵完全二叉樹,再將這棵樹維護成大頂堆,不斷重複到最後,就排好序了。
這樣便得到乙個蟲小到大的陣列。over
/******************heap sort
******************/
#include#include#include#includeusing namespace std;
void bigheap(int *a,int i,int len)//維護堆
if(rtemp)
}if(flag)
}void buildheap(int *a,int len)// 構建初始堆
}void heapsort(int *a,int len)
}int main()
}//for(int i=0;iif(flag) printf("erorr\n");
else printf("accepted\n");
}return 0;
}
堆排序,資料結構c c
堆排序聽著和圖有關係,但是其實只是引用樹的知識,也可以理解為把陣列理解為乙個滿二叉樹 說法有問題,應該是左邊滿的二叉樹 這樣就可以有這樣的乙個定義就是n節點的子節點是2n 1和2n 2兩個節點。以公升序為例 直接貼出源 include using namespace std void change ...
資料結構 堆排序 堆排序 Heap Sort
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...
資料結構 堆排序
include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...