堆排序演算法的理解與實現

2021-09-26 15:05:04 字數 1428 閱讀 4034

public

static

void

heapsort

(int

arr)

}public

static

void

heapinsert

(int

arr,

int index)

}// 交換函式

public

static

void

swap

(int

arr,

int l,

int r)

public

static

void

heapify

(int

arr,

int index,

int heapsize)

swap

(arr,largest,index)

;//largest ! = index

index = largest;

//與左右孩子中較大孩子下標交換

leftnode = index *2+

1;}}

public

static

void

heapsort

(int

arr)

for(

int i =

0; i < arr.length; i++

)int size = arr.length;

swap

(arr,0,

--size)

;while

(size>0)

}// 插入堆,大根堆

public

static

void

heapinsert

(int

arr,

int index)

}// 當堆中某個元素發生改變時重新對該元素排序

public

static

void

heapify

(int

arr,

int index,

int heapsize)

swap

(arr,largest,index)

;//largest ! = index

index = largest;

//與左右孩子中較大孩子下標交換

leftnode = index *2+

1;}}

// 交換函式

public

static

void

swap

(int

arr,

int l,

int r)

堆排序演算法實現

include define true 1 define false 0 typedef struct recordtype void sift recordtype r,int k,int m 調整堆 r i t void crt heap recordtype r,int length 建立堆 ...

堆排序演算法的實現

1.實現了乙個大根堆類。為方便呼叫定義成了static靜態類成員函式。沒有資料成員變數。乙個建堆函式,乙個調整函式。include stdafx.h 定義兩個有參巨集來尋找陣列中的數之間的關係 define left x 2 x 1 獲得左節點在陣列中的下標 define right x 2 x 1...

堆排序 heap sort 演算法講解與實現

開始時,堆不可能是這個樣子,因為,將陣列轉化為樹,是有規則的,必須把左邊填滿才能再填右邊。待排序陣列 a 46,30,82,90,56,17,95 組成乙個二叉樹,將46,30,82,90,56,17,95這幾個數字從儲存在陣列結構,轉變到二叉樹及結構,是通過為一些陣列下標賦予一些新的關係。比如,在...