ヒープソート行きます

スタックの概念:グラフのスタック構造がツリーでは、実装するために使用される「プライオリティキューを。」

1.まず、ヒープを作成します。

   特性のヒープ:

   (1).完全二叉树;

   (2)各ノードは、左と右の子ノードよりも大きくなっています。

   (3)最大ルート(杭)。

   (4)左の子ノード2I + 1を、子供は2I + 2、親ノード(I-1)/ 2ノード.;

パッケージメイン
インポート"FMT" 

FUNCのparentNode(iは整数)、INT { 
	リターン(I - 1)/ 2 
} 

//左节点
FUNC leftNode(iは整数)、INT { 
	リターン2 * I + 1 
} 
//右节点
FUNC rightNode(I INT)INT { 
	リターン2 * I + 2 
} 
//创建ヒープ
buildHeap(ヒープ[] INT){FUNC 
	長さ:= LEN(ヒープ)
	用I:=長さ/ 2から1。I> = 0; i-- { 
		maxHeap(ヒープ、I、長さ)
	} 
} 

FUNC maxHeap(ヒープ[] intは、iは、長INTをINT){ 
	左:= leftNode(I)
	右:= rightNode(I)
    最大:= 0 
    左場合<長&&ヒープ[左]>ヒープ[I] { 
    	最大=左 
	}他{
		最大I = 
	}
	右<長&&ヒープ[右]>ヒープ[最大] {もし
		最大=右
	} 
    最大場合!= I { 
    	ヒープ[i]は、ヒープ[最大] =ヒープ[最大]、ヒープ[I] 
    	//需要继续比较其父节点
		maxHeap(ヒープ、最大長さ)
	} 
} 

メインFUNC(){ 
	= [] INT {1、24、35、343、463、46、34、35、12、123、245、413、5、 132} 
	buildHeap(A)
	fmt.Println(A)
}

  

おすすめ

転載: www.cnblogs.com/xingyunshizhe/p/11311754.html