堆排序《二》 利用順序表完成

2021-08-09 04:18:58 字數 2188 閱讀 4325

利用順序表構建堆結構,可以實現增刪改查等操作。

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...