【資料結構】堆排序
參考一篇文章:
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;
}
相關文章
- 資料結構 堆排序 c Swift資料結構排序Swift
- 資料結構與演算法——堆排序資料結構演算法排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法:堆排序資料結構演算法排序
- 高階資料結構---堆樹和堆排序資料結構排序
- 資料結構初階--堆排序+TOPK問題資料結構排序TopK
- 資料結構&演算法實踐—堆排序資料結構演算法排序
- 資料結構之堆 → 不要侷限於堆排序資料結構排序
- 演算法與資料結構之原地堆排序演算法資料結構排序
- 複習資料結構:排序演算法(六)——堆排序資料結構排序演算法
- 【演算法與資料結構專場】堆排序是什麼鬼?演算法資料結構排序
- 【資料結構】堆排序和模擬實現優先順序佇列!!資料結構排序佇列
- 【資料結構與演算法】內部排序之三:堆排序(含完整原始碼)資料結構演算法排序原始碼
- 結構化資料、半結構化資料和非結構化資料
- 【資料結構篇】認識資料結構資料結構
- 資料結構小白系列之資料結構概述資料結構
- 資料結構?資料結構
- 資料結構資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- 資料結構-棧資料結構
- 資料結構-堆資料結構
- 資料結構-集合資料結構
- 資料結構 - 字串資料結構字串
- 資料結構——列表資料結構
- Redis 資料結構Redis資料結構
- 資料結構——樹資料結構
- Redis資料結構Redis資料結構
- 資料結構-樹資料結構
- Java資料結構Java資料結構
- 資料結構---串資料結構
- 資料結構|前言資料結構
- 資料結構——堆資料結構
- spacy資料結構資料結構
- 資料結構-Tree資料結構
- 資料結構:集合資料結構
- 資料結構模板資料結構
- 索引資料結構索引資料結構