堆排序 基於scala實現

2021-09-26 11:09:12 字數 1076 閱讀 1961

堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:

大頂堆:每個節點的值都大於或等於其子節點的值,在堆排序演算法中用於公升序排列;

小頂堆:每個節點的值都小於或等於其子節點的值,在堆排序演算法中用於降序排列;

堆排序的平均時間複雜度為 ο(nlogn)。

建立乙個堆 h[0……n-1];

把堆首(最大值)和堆尾互換;

把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;

重複步驟 2,直到堆的尺寸為 1。

詳細過程

package cn.myname.sort

import scala.collection.mutable.arraybuffer

import scala.util.control.breaks._

object heap_sort

def sort(arr:arraybuffer[int]):arraybuffer[int] =

var j = arr.length - 1

//自上而下從大頂堆中將最大數放置末尾,並且餘下的結構也要滿足大頂堆的定義.

while ( j > 0)

arr} def heap(arr:arraybuffer[int],m:int,j:int):unit = }}

arr(i) = x //將父節點的值賦給子節點

}}

arraybuffer(4, 5, 6, 8, 9)

程序完成,退出碼 0

堆排序主要是要先建立堆,此時是從下到上,自左向右,每個非葉節點都要滿足堆的定義.

然後是排序的過程,將堆頂元素和末尾元素交換,交換後的堆是從上到下

一一判斷每個非葉節點是否滿足堆的定義,

此時不必考慮最後乙個元素,最後得到了乙個公升序結果.

堆排序|菜鳥教程

九大排序演算法

快速排序 基於scala實現

快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想 分治法也確實實用.快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想...

堆排序時間複雜度 基於PHP實現堆排序原理

每日17點準時技術乾貨分享 堆 堆 heap 是電腦科學中一類特殊的資料結構的統稱,通常是乙個可以被看做一棵樹的陣列物件。堆 ki k2i,ki k2i 1 ki k2i,ki k2i 1 i 1,2,3,4.n 2 關於堆 完全二叉樹 說到堆排序,就不能不提完全二叉樹,這些基本概念在網上到處都是,...

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...