ByProduct - 副産物

IT FukuSanButsu Blog

社内インフラエンジニアの自宅からはじまるIT
自宅のPCに向き合いながら気づいたことや個人的な知見をまとめています


プロフィール
しらせ(HN)
とあるIT企業のインフラエンジニア。プライベートでは開発もちょっとやります。
※本ブログの内容はすべて個人の見解であり、所属する企業とは関連ありません。
2023/09/30 暫く更新停止中m
プロフィールを読む
カテゴリ別
内部リンク
相互リンク
Twitter
来訪
1067834 [合計]
42 [今日]
491 [昨日]
Powered by
Powered by AWS Cloud Computing

【アルゴリズム】ヒープソートの動きを見たい(PowerShell編)

2021/06/09
2021/06/09

コーディング


お疲れ様です。
しらせです。

前回に続き今回も違う言語でヒープソートを動かしていきます。

前回:【アルゴリズム】ヒープソートの動きを見たい

もくじ

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 "何か入力して終了"

動作

上記コードをコピーして、適当なファイル名.ps1で保存します。
この時、スクリプトファイルの文字コードはANSIでないとダメです。

PS C:\Users\myaccount> &"D:\Users\適当なファイル名.ps1"

PowerShellを起動して、スクリプトファイルをドラッグ&ドロップしたら先頭に&を付けて実行します。

PS C:\Users\myaccount> &"D:\Users\適当なファイル名.ps1"
ソート開始します[y]:y

yでスタートします。

うまくいくと1秒間隔で更新されます。こんな感じに。
前回と違って実行時に基準値を変数に持たない仕様にしてみました^^

まとめ

       /ニYニヽ
   (ヽ   /( ゚ )( ゚ )ヽ   /)
  (((i ) /::::⌒`´⌒::::\  ( i)))  でっていうwwwwwwwwwwwwwww
 /∠_| ,-)___(-,|_ゝ \
( ___、  |-┬-|    ,__ )
    |    `ー'´   /´
    |         /

記念すべき100記事目はしょうもない内容でした。

以上
お疲れさまでした。



View:861 この記事をツイート!