プロフィール


とあるIT企業のインフラエンジニア。プライベートでは開発もちょっとやります。
※本ブログの内容はすべて個人の見解であり、所属する企業とは関連ありません。
2023/09/30 暫く更新停止中m
プロフィールを読む
カテゴリ別




























内部リンク
相互リンク
Twitter
来訪
1392718 [合計]
269 [今日]
796 [昨日]
269 [今日]
796 [昨日]
Powered by
【アルゴリズム】ヒープソートの動きを見たい(PowerShell編)




お疲れ様です。
しらせです。
前回に続き今回も違う言語でヒープソートを動かしていきます。
もくじ
PowerShellで実装したい
今回はPowerShellで実装します。
前回を参考に移植します。PowerShellマジでPowerShell。
4つのfunctionを定義しています。
最初に「start_heap」が呼ばれ、続いて「heap」「swap」が動きます。
showは表示をするだけの関数です。
配列は$haiに格納しています。
$hai =(3,1,2,9,6,4,5,7,8)
function heap($k, $r){
$v = $hai[$k];
while(1){
$j = 2 * $k + 1;
if($j -gt $r){
break;
}
if($j -ne $r){
if($hai[$j + 1] -gt $hai[$j]){
$j = $j + 1;
}
}
if($v -ge $hai[$j]){
break;
}
$hai[$k] = $hai[$j];
$k = $j;
}
$hai[$k] = $v;
show
}
function swap($i , $j){
$tmp = $hai[$i];
$hai[$i] = $hai[$j];
$hai[$j] = $tmp;
}
function show(){
cls
for($i = 0 ; $i -lt $hai.length ; $i++){
for($j=0 ; $j -lt $hai[$i] ; $j++){
write-host -n ".";
}
echo ""
}
sleep(1);
}
function start_heap(){
show
for($i = [int]([Math]::Floor(($hai.length -2)/2)) ;$i -ge 0 ; $i--){
heap $i ($hai.length -1);
}
for($i = $hai.length - 1 ; $i -gt 0 ; $i--){
swap 0 $i;
heap 0 ($i - 1);
}
}
if((read-host "ソート開始します[y]") -eq "y"){
start_heap
}
read-host "何か入力して終了"
function heap($k, $r){
$v = $hai[$k];
while(1){
$j = 2 * $k + 1;
if($j -gt $r){
break;
}
if($j -ne $r){
if($hai[$j + 1] -gt $hai[$j]){
$j = $j + 1;
}
}
if($v -ge $hai[$j]){
break;
}
$hai[$k] = $hai[$j];
$k = $j;
}
$hai[$k] = $v;
show
}
function swap($i , $j){
$tmp = $hai[$i];
$hai[$i] = $hai[$j];
$hai[$j] = $tmp;
}
function show(){
cls
for($i = 0 ; $i -lt $hai.length ; $i++){
for($j=0 ; $j -lt $hai[$i] ; $j++){
write-host -n ".";
}
echo ""
}
sleep(1);
}
function start_heap(){
show
for($i = [int]([Math]::Floor(($hai.length -2)/2)) ;$i -ge 0 ; $i--){
heap $i ($hai.length -1);
}
for($i = $hai.length - 1 ; $i -gt 0 ; $i--){
swap 0 $i;
heap 0 ($i - 1);
}
}
if((read-host "ソート開始します[y]") -eq "y"){
start_heap
}
read-host "何か入力して終了"
動作
上記コードをコピーして、適当なファイル名.ps1で保存します。
この時、スクリプトファイルの文字コードはANSIでないとダメです。
PS C:\Users\myaccount> &"D:\Users\適当なファイル名.ps1"
PowerShellを起動して、スクリプトファイルをドラッグ&ドロップしたら先頭に&を付けて実行します。
PS C:\Users\myaccount> &"D:\Users\適当なファイル名.ps1"
ソート開始します[y]:y
ソート開始します[y]:y
yでスタートします。
うまくいくと1秒間隔で更新されます。こんな感じに。
前回と違って実行時に基準値を変数に持たない仕様にしてみました^^
まとめ
/ニYニヽ
(ヽ /( ゚ )( ゚ )ヽ /)
(((i ) /::::⌒`´⌒::::\ ( i))) でっていうwwwwwwwwwwwwwww
/∠_| ,-)___(-,|_ゝ \
( ___、 |-┬-| ,__ )
| `ー'´ /´
| /
記念すべき100記事目はしょうもない内容でした。
以上
お疲れさまでした。
View:1705 Tweet この記事をツイート!