堆排序(遞迴 迭代三種寫法)

2021-10-12 10:37:35 字數 681 閱讀 2077

具體的演算法流程可以參考 **排序演算法(三)之堆排序

堆排序的基本思路

這裡重點討論下調整堆結構這個操作,這個結構是建立在大頂堆已經建立的基礎上的,有遞迴和迭代兩種方法。

遞迴方法:

public

void

heapify

(int

arr,

int n,

int i)

}

非遞迴方法

public

void

adjustheap1

(int

arr,

int i,

int length)

if(arr[k]

> temp)

else

}}

其中這個swap操作還可以進行優化

public

void

adjustheap

(int

arr,

int i,

int length)

if(arr[k]

> temp)

else

} arr[i]

= temp;

//將temp值放到最終的位置

}

堆排序(公升序,降序,迭代,遞迴寫法)

是一種選擇排序。平均時間複雜度為0 nlogn 是不穩定排序 大頂堆 完全二叉樹,每個節點的值都大於或等於其左右子節點的值。左右子節點的值不作要求 小頂堆 完全二叉樹,每個節點的值都小於或等於其左右子節點的值 將待排序序列構造層乙個大頂堆 左節點2n 1 右節點2n 2 父節點 i 1 2 序列的最...

關於氣泡排序,三種寫法

最近寫乙個簡單的排序,就用冒泡就行,結果忘了。於是就重新思考寫了一下。隨手寫出乙個,竟然寫完後有點懵了,到底寫的對不對呢。為方便,用matlab進行驗證,並檢視了網上流行的寫法。都寫在下面,其中,自認為第二種為最容易理解。當然,3種寫法,交換次數完全相同,交換之後結果完全相同。程式如下 clc cl...

合併排序的三種不同寫法,包括遞迴和非遞迴

在學演算法設計課中,學到合併排序時,並把合併排序的三種不同的寫法都寫了一遍 兩種遞迴的形式其實大同小異,只是在一種寫法中整個演算法只分配了乙個臨時陣列而一種寫法中每次遞迴時都會分配臨時空間用於暫存資料 一 遞迴形式的一種寫法 每次遞迴操作中都分配新的空間 void merge1 item a,ite...