Java語言實現簡單的堆排序

2021-08-28 08:24:18 字數 1343 閱讀 9408

直接切入正題。在這裡實現乙個一維陣列的簡單堆排序。

文字描述看的頭痛,直接看圖顯得直觀一些

第一步:根據堆排序的定義,通過完全二叉樹的方式去 實現,先定義乙個node類存放節點資訊

class node

public node getparent()

public integer getindex()

public void setindex(integer index)

public void setparent(node parent)

public node getleft()

public void setleft(node left)

public node getright()

public void setright(node right)

public object getdata()

public void setdata(object data)

}

第二步,初始化二叉樹,將陣列中的元素放入node中的data區儲存,同時構建每個節點的雙親、左右孩子的關係

//建立一棵樹,為每個node節點新增雙親節點和子節點

public static node createtree(object arr) else }}

return tree;

}

第三步:構造大根堆,調整每個節點的值,使得除葉子節點外的所有節點的data都不小於其左右子節點的data

public static node bigrootheap(node tree)

}else

}}else

}}else

i--;

}return tree;

}

對二叉樹進行調整,使得最大值放在最後乙個節點,第二大值放在倒數第二個節點…以此類推

public static void sortnode(node tree)else

bigrootheap(tree);

i--;

}//直接將排序內容輸出

for(int j= 0;j執行結果

public static void main(string args);

sortnode(bigrootheap(createtree(arr)));

}

1 2 12 23 34 54 3433

C語言實現堆排序

一 堆排序的原理。堆排序是利用堆的性質進行的一種選擇排序。堆實際上是一顆完全二叉樹,其中任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 或 key i key 2i 1 key i key 2i 任何一非葉節點的關鍵字不大於或者不小於其左右孩子。二 堆排序的思想。利用...

C語言實現堆排序

堆排序在初學時對我來說也是比較難掌握的一種排序方法,大頂堆 小頂堆的定義能搞明白就不錯了,演算法在初學的時候基本是自己寫不出來的。現在回過頭來看一看演算法描述,發現其實也不難理解,甚至還能看出來書中演算法描述的小瑕疵,不過還是要記錄一下,難免會忘記。將初始待排序關鍵字序列 r1,r2 rn 構建成大...

堆排序 c語言實現

演算法特點 1.不穩定排序 2.只能用於順序結構,不能用於鏈式結構 3.初始建堆所需比較次數較多,因此記錄數較少不宜採用。堆排序在最壞情況下時間複雜度為o nlogn 相對於快速排序的o n n 而言是乙個優點,當記錄比較多時較為高效。include include using namespace ...