HeapSort.pas 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. Program HeapSort;
  2. {�ã çâ®, ¤®¦¤ «¨áì ¢ë ¨ í⮩ ç¥à⮢®© ¯¨à ¬¨¤ «ì­®© á®àâ¨à®¢ª¨
  3. Ÿ ¢á¥-â ª¨ ¢à㡨«áï ª ª â ¬ çâ®. Žª § «®áì ¥é¥ ¡®«¥¥ á«®¦­® 祬 ª § «®áì
  4. ¢­ ç «¥. Žá­®¢­ ï ¨¤¥ï:
  5. - „¥à¥¢  ­¨ª ª®£® ­¥â, ¨ ­¥ ¡ë«®!
  6. - ‡ â® íâ  ¤®«¡ ­ ï ¯¨à ¬¨¤  á®é¥áâ¢ã¥â ¢ ⢮¥¬ ¬®§£ã
  7. ‘ ‘€ŒŽƒŽ �€—€‹€ ‚ �Ž‹�ŽŒ �€‡Œ…�…!
  8. - �ã ¨ ⨯  ¬ë á ­¨¦­¨å à冷¢ ¥¤¥¬ ¢ ¢¥àå, ­  ª ¦¤®¬ è £¥
  9. ¯à®á¥¨¢ ï ⥪ã騩 í«-â ç¥à¥§ ¯¨à ¬¨¤ã (á¬. �. ‚¨àâ )
  10. - ’ ª¨¬ å७®¬ ®â¥å ¢ á á¥à¥¤¨­ë ¤® á ¬®£® ¢¥àå , â.¥. ¯à®á¥¨¢ ¢á¥ í«-âë
  11. ¬ë ¯®«ã稫¨ íâã ¤®«¡ ­­ãî ¯¨à ¬¨¤ã, á ãá«®¢¨¥¬ çâ® ¤¢  ᨭ  ¢á¥£¤ 
  12. ¡®«ìè¥ ®âæ !
  13. - �®â®¬ - ᮢ¥à襭­® ¤à㣮© íâ ¯: á ¬  á®àâ¨à®¢ª  ¨ ¥áâì.
  14. 1) ’.ª. ¯¨à ¬¨¤  㤮¢«¥â¢®àï¥â ãá«. (A[i] < A[2i]) AND (A[i] < A[2i+1])
  15. §­ ç¨â A[1] - á ¬ë© ¬ «¥­ìª¨© í«¥¬¥­â !
  16. 2) �ã ¬ë ¥£® ¨ ¯¨å ¥¬ ¢ ¯®á«¥¤­¨© í«-â ¯¨à ¬¨¤ë,   ¥£® - ¢ £®«®¢ã ¨
  17. ¯à®á¥¨¢ ¥¬. ’ ª¨¬ ®¡à §®¬ ­  ¢¥àåã - ®¯ïâì á ¬ë© ¬ «¥­ìª¨©.
  18. ˆ ¯à¨ í⮬ 㬥­è ¥¬ ¤«¨­ã ­ è¥© ¯¨à ¬¨¤ë ­  1
  19. 3) �®ª  ­ è  ¯¨à ¬¨¤  ¥é¥ ­¥ ¯ãáâ ï ¯®¢â®à塞.
  20. 4) ’ ª¨¬ å७®¬ - ã ­ á ®¡à â­® ®âá®àâ¨à®¢ ­­ë© ¬ áᨢ. �㠢ᥠáà ¢­¥­¨ï
  21. - ­ ®¡®à®â - ¢®â ⥡¥ ¨ ¯àﬠï á®àâ¨à®¢ª !
  22. PS. ¯®¯à®¡ãî íâ® ¢ ª®¤¥ ®âª®¬¬¥­â¨à®¢ âì ;)
  23. }
  24. CONST
  25. ArLen = 10;
  26. TYPE
  27. Index = 1..ArLen;
  28. Item = word;
  29. VAR
  30. Pir : array [1..ArLen] of Item;
  31. Procedure Sift(L,R:word);{�«¨­! Sift - ¯à®á¥¨¢ âì ¯®  ­£«¨æª¨!}
  32. var
  33. i, j : Index;
  34. x : Item;
  35. {‚ í⮩ ¯à®æ¥¤ãॠᠬ®¥ ¢ ¦­®¥ - L ¨ R, ®­¨ ®â¢¥ç îâ ­¥ ¯à®áâ® §¨ ¨­¤¥ªáë,
  36.   ¥é¥ £®¢®àïâ ® ⮬, ª ª ï ç áâì ¯¨à ¬¨¤ë ᥩç á ॠ«ì­® à áᬠâਢ ¥âáï}
  37. begin
  38. i := L; {’®â, ª®â®àë© ¬¥­ï¥¬}
  39. j := 2*i; {�  ª®£® ¬®¦­® ¬¥­ïâì}
  40. x := Pir[L]; {Š®£® ¯à®á¥¨¢ ¥¬}
  41. if (j<R) AND (Pir[j] < Pir[J+1]) then Inc(j); {‚롥६ ­ ¨¡®«ì襣® ¯®â®¬ª }
  42. while (j<=R) and (x < Pir[j]) do
  43. begin
  44. Pir[i] := Pir[j]; {Ž¡¬¥­ï«¨, ¤®áâ â®ç­® ¯à®áâ® § ¬¥­¨âì á¥¡ï ­  ᢮¥£® áë­ 
  45. â.ª á ¬ - x ¨ ®­ ­¨ªã¤  ­¥ ¤¥­¥âáï}
  46. i := j; {‘¯ãá⨫¨áì}
  47. j := 2*i;
  48. if (j<R) AND (Pir[j] < Pir[J+1]) then Inc(j); {‚롥६ ­ ¨¡®«ì襣® ¯®â®¬ª }
  49. end;
  50. Pir[i] := x; {�ã ¢®â ¨ ¢¥à­¥¬ x ­  ¬¥áâ®}
  51. {Ÿ �… �Ž�ˆŒ€ž �Ž—…Œ“ �’މ ‘’�ŽŠˆ �…’ ‚ ‚ˆ�’… }
  52. end;{Sift}
  53. {-------------------------}
  54. VAR
  55. L,R : index;
  56. x : item;
  57. BEGIN
  58. Randomize;
  59. for l := 1 to ArLen do Pir[l] := Random(200);
  60. L := ArLen Div 2 + 1; {ˆ¤¥ï - ­¨¦­ïï ç áâì - ­¥ âॡã¥â ¯à®á¥¢ª¨}
  61. R := ArLen;
  62. while L>1 do
  63. begin
  64. Dec(L);
  65. Sift(L,R);
  66. end;
  67. While R > 1 do
  68. begin
  69. x := Pir[R];
  70. Pir[R]:=Pir[1]; {ˆ¤¥ï ® ¢¯¨å¨¢ ­¨¨ ¢¥àå­¥£® ¢ ª®­¥æ ¯¨à ¬¨¤ë}
  71. Pir[1] := x;
  72. Dec(R);
  73. Sift(L,R);
  74. end;
  75. for l := 1 to ArLen do WriteLn(Pir[l]);
  76. END.