atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
うらでぃみーる通信 @Wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
うらでぃみーる通信 @Wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
うらでぃみーる通信 @Wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • うらでぃみーる通信 @Wiki
  • ヒープソート

うらでぃみーる通信 @Wiki

ヒープソート

最終更新:2009年11月04日 00:00

vladinet

- view
だれでも歓迎! 編集
  1. use strict;
  2. use warnings;
  3.  
  4. my $LIST_SIZE ||= 20;
  5. my @heap;
  6.  
  7. for(my $i = 0; $i < $LIST_SIZE; $i++){
  8. $heap[$i] = int($i);
  9. }
  10.  
  11. #ランダムに並び替える
  12. srand;
  13. for (my $i = @heap; --$i; ) {
  14. my $j = int rand ($i + 1);
  15. next if $i == $j;
  16. @heap[$i, $j] = @heap[$j, $i];
  17. }
  18.  
  19. # 1個目はダミー
  20. my @g_heap = (-1);
  21.  
  22. print_array(\@heap); # 実行前
  23. &heapsort(\@heap);
  24. print_array(\@heap); # 実行後
  25.  
  26. sub heapsort{
  27. my $array = shift;
  28. &insertheap($array);
  29. for(my $i = 0; $i < scalar(@$array); $i++){
  30. $array->[$i] = &get_root;
  31. }
  32. }
  33.  
  34. sub insertheap{
  35. my $array = shift;
  36. for(my $i = 0; $i < scalar(@$array); $i++){
  37. push @g_heap, $array->[$i];
  38. upheap($#g_heap);
  39. }
  40. }
  41.  
  42. sub upheap{
  43. my $index = shift;
  44. my $tmp = $g_heap[$index];
  45. while( ($index > 1) && ($g_heap[int($index / 2)] > $tmp)){
  46. $g_heap[$index] = $g_heap[int($index / 2)];
  47. $index = int($index / 2);
  48. }
  49. $g_heap[$index] = $tmp;
  50. }
  51.  
  52. sub get_root{
  53. my $tmp;
  54. if( scalar(@g_heap) < 1){
  55. print "ヒープが空です";
  56. exit;
  57. }
  58. $tmp = $g_heap[1];
  59. $g_heap[1] = $g_heap[$#g_heap];
  60.  
  61. pop @g_heap;
  62.  
  63. &downheap;
  64. return $tmp;
  65. }
  66.  
  67. sub downheap{
  68.  
  69. if(scalar(@g_heap) < 2){
  70. return;
  71. }
  72.  
  73. my $tmp = $g_heap[1];
  74.  
  75. my $i = 1;
  76.  
  77. while($i <= int($#g_heap / 2)){
  78. my $j = $i * 2;
  79.  
  80. if( ($j + 1 <= $#g_heap) && ($g_heap[$j] > $g_heap[$j + 1]) ){
  81. $j++;
  82. }
  83.  
  84. if($tmp <= $g_heap[$j]){
  85. last;
  86. }
  87.  
  88. $g_heap[$i] = $g_heap[$j];
  89. $i = $j;
  90. }
  91. $g_heap[$i] = $tmp;
  92. }
  93.  
  94. sub print_array{
  95. my $ref_array = shift;
  96. for my $i(@$ref_array){
  97. print "$i ";
  98. }
  99. print "\n";
  100. }
  101.  
「ヒープソート」をウィキ内検索
LINE
シェア
Tweet
うらでぃみーる通信 @Wiki
記事メニュー
メニュー
  • トップページ
  • 更新履歴
  • うらでぃみーる通信
  • お勉強メモ
  • Link
    • Link(英語)
    • Link13
    • Link21
    • Link(読み物)
記事メニュー2

更新履歴

取得中です。
最近更新されたページ
  • 469日前

    link24
  • 511日前

    memo(herowars)
  • 1176日前

    Link
  • 1499日前

    メニュー
  • 1501日前

    Link(読み物)
  • 1533日前

    Link21
  • 2888日前

    memo_京都検定
  • 3621日前

    英語名
  • 4004日前

    Link13
  • 4299日前

    Link(株式)
もっと見る
最近更新されたページ
  • 469日前

    link24
  • 511日前

    memo(herowars)
  • 1176日前

    Link
  • 1499日前

    メニュー
  • 1501日前

    Link(読み物)
  • 1533日前

    Link21
  • 2888日前

    memo_京都検定
  • 3621日前

    英語名
  • 4004日前

    Link13
  • 4299日前

    Link(株式)
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. しかのつのまとめ
  5. シュガードール情報まとめウィキ
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. ソードランページ @ 非公式wiki
  8. SYNDUALITY Echo of Ada 攻略 ウィキ
  9. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  10. ドラゴンボール Sparking! ZERO 攻略Wiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 召喚 - PATAPON(パタポン) wiki
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. ステージ - PATAPON(パタポン) wiki
  5. ロスサントス警察 - ストグラ まとめ @ウィキ
  6. LUPIN THE IIIRD THE MOVIE 不死身の血族 - アニヲタWiki(仮)
  7. アイテム - PATAPON(パタポン) wiki
  8. ステージ攻略 - パタポン2 ドンチャカ♪@うぃき
  9. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  10. 可愛い逃亡者(トムとジェリー) - アニヲタWiki(仮)
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.