堆的基本實現以及堆排序

2021-10-01 17:33:28 字數 1732 閱讀 4309

heap.h

#pragma once

#include#include#include#include#include#includetypedef int hpdatatype;

typedef struct heap

heap;

void heapcreat(heap* hp, hpdatatype* a, int n); //堆的初始化

void heapdestory(heap* hp); //堆的清空

hpdatatype heaptop(heap* hp); //

heap *swap(hpdatatype *a, hpdatatype* b);//交換

int heapsize(heap* hp); //堆的大小

int heapempty(heap* hp);//判斷堆是否為空

void adjustup(hpdatatype *a, int n, int child);//向上調整

void adjustdown(hpdatatype *a, int n, int root);//向下調整

// 堆排序 void heapsort(int* a, int n);

heap.c

//建立大堆

void heapcreat(heap* hp, hpdatatype* a, int n) //堆的初始化

}void heapdestory(heap* hp) //堆的清空

hp->_a[hp->_size++] = x;

//向上調整

adjustup(hp->_a, hp->_size, hp->_size - 1);

}heap *swap(hpdatatype *x, hpdatatype *y)

hpdatatype heaptop(heap* hp) //堆頂

else

return hp->_a[0];

}int heapsize(heap* hp)//堆的大小

hpdatatype heapempty(heap* hp)//判斷堆是否為空

else }

void adjustup(hpdatatype *a, int n, int child)//向上調整

else

break; }}

void adjustdown(hpdatatype *a, int n, int root)//向下調整

else

break; }}

printf("\n");

}

test.c

#include"heap.h"

void sort(int*brr, int n)//堆排序

int end =n - 1;

while (end)//每次將堆頂的值放在最後,再繼續向下調整,繼續互換 }

int main()

; heapcreat(&hp,&a, 10); //堆的初始化

//heapsize(&hp); //堆的大小

// heaptop(&hp); //

// heapempty(&hp);//判斷堆是否為空

//heapdestory(&hp); //堆的清空*/

int brr[5] = ;

sort(&brr, 5);

}

學了這麼長時間的資料結構還是不太懂怎們傳參

堆的實現以及堆排序 最大堆,最小堆

堆是一種特殊的資料結構,相當於陣列實現的一顆二叉樹,但是和一般的二叉搜尋樹不同 1.堆分為最大堆 父結點的值必大於其孩子結點的值 和最小堆 父結點的值必小於其孩子結點的值 而二叉搜尋樹中左孩子結點的值小於父節點的值,右孩子結點的值大於父節點的值。2.堆採用陣列形式儲存,相較於二叉樹的鍊錶結構減少記憶...

堆以及堆排序實現

1.今天實現了一下堆排序,這裡的堆是指二叉堆,至於二項堆和斐波那契堆以後再說。先看二叉堆的定義 二叉堆是完全二叉樹或近似完全二叉樹。滿足特性是 父親節點的值大於等於 小於等於 左右孩子的值,並且左右子樹也是二叉堆。對應的二叉堆是大頂堆 小頂堆 二叉堆是完全二叉樹,可以用線性表來儲存。2.實現堆排序時...

堆以及php實現堆排序

什麼是堆 這裡的堆 二叉堆 指得不是堆疊的那個堆,而是一種資料結構。堆可以視為一棵完全的二叉樹,完全二叉樹的乙個 優秀 的性質是,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素.陣列與堆之間的關係 二叉堆一般分為兩種 最大堆和最小堆。什麼是最大堆 堆中每個...