【資料結構】堆排序
參考一篇文章:
http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html
另外,在下面的連結下還有動畫演示:
http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/duipaixu.htm
下面是原始碼:
/*堆排序(大頂堆) 2011.9.14*/
#include<stdio.h>
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void HeapAdjust(int *a,int i,int size) //調整堆
{
int lchild=2*i; //i的左孩子節點序號
int rchild=2*i+1; //i的右孩子節點序號
int max=i; //臨時變數
if(i<=size/2) //如果i不是葉節點就不用進行調整
{
if(lchild<=size&&a[lchild]>a[max])
{
max=lchild;
}
if(rchild<=size&&a[rchild]>a[max])
{
max=rchild;
}
if(max!=i)
{
swap(&a[i],&a[max]);
HeapAdjust(a,max,size); //避免調整之後以max為父節點的子樹不是堆
}
}
}
void BuildHeap(int *a,int size) //建立堆
{
int i;
for(i=size/2;i>=1;i--) //非葉節點最大序號值為size/2
{
HeapAdjust(a,i,size);
}
}
void HeapSort(int *a,int size) //堆排序
{
int i;
BuildHeap(a,size);
for(i=size;i>=1;i--)
{
//cout<<a[1]<<" ";
swap(&a[1],&a[i]); //交換堆頂和最後一個元素,即每次將剩餘元素中的最大者放到最後面
//BuildHeap(a,i-1); //將餘下元素重新建立為大頂堆
HeapAdjust(a,1,i-1); //重新調整堆頂節點成為大頂堆
}
}
int main(int argc, char *argv[])
{
//int a[]={0,16,20,3,11,17,8};
int a[100];
int size;
int i;
printf("給size賦值(1<=size<100):\n");
scanf("%d",&size);
printf("輸入size個值給陣列:\n");
for(i=1;i<=size;i++)
scanf("%d",&a[i]);
HeapSort(a,size);
printf("調整後的陣列為:\n");
for(i=1;i<=size;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
相關文章
- 資料結構與演算法:堆排序資料結構演算法排序
- 資料結構學習筆記-堆排序資料結構筆記排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 高階資料結構---堆樹和堆排序資料結構排序
- 資料結構初階--堆排序+TOPK問題資料結構排序TopK
- 演算法與資料結構之原地堆排序演算法資料結構排序
- 資料結構之堆 → 不要侷限於堆排序資料結構排序
- 【演算法與資料結構專場】堆排序是什麼鬼?演算法資料結構排序
- 結構化資料、半結構化資料和非結構化資料
- 【資料結構篇】認識資料結構資料結構
- 資料結構小白系列之資料結構概述資料結構
- 資料結構資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- leetcode演算法資料結構題解---資料結構LeetCode演算法資料結構
- 資料結構——樹資料結構
- Redis資料結構Redis資料結構
- 資料結構-樹資料結構
- 資料結構-Tree資料結構
- Python資料結構Python資料結構
- 資料結構-堆資料結構
- 資料結構-集合資料結構
- 資料結構 - 字串資料結構字串
- 資料結構---串資料結構
- 資料結構-棧資料結構
- Map 資料結構資料結構
- 【模板】資料結構資料結構
- 模板 - 資料結構資料結構
- 14 資料結構資料結構
- 資料結構 - 堆資料結構
- [資料結構]堆資料結構
- 資料結構 - 圖資料結構
- 資料結構 - 棧資料結構
- 資料結構——列表資料結構
- Redis 資料結構Redis資料結構
- 資料結構——堆資料結構
- spacy資料結構資料結構
- Java資料結構Java資料結構