利用順序表構建堆結構,可以實現增刪改查等操作。
heap.h
#ifndef heap_h
#define heap_h
#define heap_size 100
typedef int elemtype;
typedef struct
heap;
bool init_heap(heap *hp);
void destroy_heap(heap *hp);
void clear_heap(heap *hp);
bool empty_heap(heap *hp);
bool full_heap(heap *hp);
int size_heap(heap *hp);
elemtype pop_heap(heap *hp);
void insert_heap(heap *hp,elemtype *ar,int n);
void push_heap(heap *hp,elemtype x);
void make_heap(heap *hp);
void make_sort(heap *hp);
void print_heap(heap *hp);
#endif
heap.cpp
#include "heap.h"
#include
#include
#include
#include
templatevoid swap(type &a,type &b)
bool init_heap(heap *hp) //初始化 堆
void destroy_heap(heap *hp) //銷毀堆
void clear_heap(heap *hp) //清空
void fileterdown(elemtype *p,int start,int end) // 向下調整
p[i] = tmp;
}void fileterup(elemtype *p,int start) //向上調整
p[i] = tmp;
}bool empty_heap(heap *hp) //判斷空
bool full_heap(heap *hp) // 判斷滿
int size_heap(heap *hp) // 大小
elemtype pop_heap(heap *hp) //出堆
void make_heap(heap *hp) //形成堆
}void insert_heap(heap *hp,elemtype *ar,int n) //插入
hp->cursize = n;
make_heap(hp);
}void push_heap(heap *hp,elemtype x) // 入堆
hp->data[hp->cursize] = x;
hp->cursize++;
fileterup(hp->data,hp->cursize-1);
}void make_sort(heap *hp) //排序
}void print_heap(heap *hp) //列印
printf("\n");
}void main()
; int n = sizeof(ar)/sizeof(ar[0]);
//elemtype br=;
//int m = sizeof(br)/sizeof(br[0]);
for(int i = 0;i"%d",&x);
push_heap(&hp,x);
while(!empty_heap(&hp))
printf("\n");
}
// int *p ; 野指標
/* p = (int *)malloc(sizeof(int))
free(p);
*p = 1000; //無效指標 ==>解決: free後需要將 p = null;
free(p); // 會出現 單執行緒:可能崩潰 多執行緒:可能被其他執行緒malloc
*/ 問題:用函式指標控制 建立的是大堆 還是小堆
用巨集定義實現單個堆時的 大堆小堆指令問題
堆排序的順序儲存
堆排序順序儲存 公升序 完全二叉樹的概念 前h 1層為滿二叉樹,最後一層連續缺失右結點!首先堆是一棵全完二叉樹 a 構建乙個堆分為兩步 建立一棵完全二叉樹 調整為乙個堆 標註 大根堆為公升序,小根堆為降序 b 演算法描述 建立一棵完全二叉樹 while 有雙親 c 時間複雜度為 o nlogn 空間...
排序二 堆排序
子結點的鍵值或索引總是小於 或者大於 它的父節點。堆通過一維陣列實現。在起始陣列為 0 的情形中 父節點i的左子節點在位置 2 i 1 父節點i的右子節點在位置 2 i 2 子節點i的父節點在位置 floor i 1 2 堆中的最大值總是位於根節點。堆中定義以下幾種操作 1 最大堆調整 max he...
排序(二) 快速排序 堆排序
一 排序分析 5 快速排序 時間複雜度 o nlog2n 有序 o n 2 空間複雜度 o log2n 演算法穩定性 不穩定 快速排序 分割槽 遞迴操作 固定位置選取基準法low 隨機選取 有序資料的優化 三分選取 優化 1 直接插入 少於100各元素 2 聚集基準位置法 取基準 分資料段 1 lo...