演算法導論 第6章

2021-06-14 23:22:31 字數 809 閱讀 1776

這一章,前言講了為什麼要排序?

接著介紹本章主題,堆排序。

那麼什麼又是堆呢?

一種資料結構,當然有很多性質,這個我在前面資料結構說過了,然後有兩種。

1.大根堆-----它是用來堆排序的。

2.小根堆-----它是用來做優先順序佇列的。

清楚了這兩種用途,那麼我們來看**:

關於堆排序:

public class heap_sort 

} private static void perdown(int a,int i,int n)

// 去掉並返回具有最大關鍵字的元素

// 注意:這裡每次maxheapify的是heapsize

int heapextractmax(int a, int heapsize)

// 將元素a[i]的值增加到key

void heapincreasekey(int a, int i, int key) }

// 插入關鍵字為key的元素

void maxheapinsert(int a, int key, int heapsize)

}

所謂最大優先順序佇列,它支援以上4種操作。

insert()把乙個元素插入佇列

maximum()返回佇列中最大的元素

extract-max()去掉並返回現在佇列的元素

crease-key()將乙個元素增大到k時的優先順序佇列操作。

所有以上的操作,都是基於堆,這種資料結構,因為實現佇列,其實還有別的資料結構,比如說,基本的佇列,只要新增優先順序資料域。

《演算法導論》 第6章堆排序

include include using namespace std 定義結構體,其中包含陣列長alength,堆長heap size。struct dui 返回堆中元素i的父結點的下標 i 2向下取整,即i進行左移一位操作。int parent int i 返回堆中元素i的左孩子的下標 i 2 ...

演算法導論第6章 堆排序

本章開始介紹了堆的基本概念,然後引入最大堆和最小堆的概念。全章採用最大堆來介紹堆的操作,兩個重要的操作是調整最大堆和建立最大堆,接著著兩個操作引進了堆排序,最後介紹了採用堆實現優先順序佇列。1 堆 堆給人的感覺是乙個二叉樹,但是其本質是一種陣列物件,因為對堆進行操作的時候將堆視為一顆完全二叉樹,樹種...

《演算法導論》筆記 第6章 堆排序

第6章 堆排序 本章主要介紹了堆的基本知識和幾個基本操作過程 堆 二叉 堆資料結構是一種陣列物件,它可以被看作是一棵完全二叉樹。heap size a 即堆的大小是已知的,樹的根結點是a 1 某個i結點,它的父結點parent i 為,左兒子left i 和右兒子right i 的下標可以簡單地計算...