bsort.pas 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. type
  2. PRec = ^TRec;
  3. TRec = record
  4. key : integer;
  5. N,P : PRec;
  6. end;
  7. procedure Insert(a,b:Prec);
  8. begin
  9. b^.p^.n := b^.n;
  10. if (b^.n <> nil) then b^.n^.p := b^.p;
  11. a^.n^.p := b;
  12. b^.n := a^.n;
  13. a^.n := b;
  14. b^.p := a;
  15. end;
  16. procedure Bsort(L:PRec);
  17. var
  18. i,j,m : PRec;
  19. begin
  20. i := L;
  21. while (I^.N <> nil) do
  22. begin
  23. j := i^.N;
  24. M := J;
  25. while J <> NIL do
  26. begin
  27. if j^.key < m^.key then m:=j;
  28. j := j^.n;
  29. end;
  30. Insert(i,m);
  31. I := I^.n;
  32. end;
  33. end;
  34. procedure PrintN(L:Prec);
  35. begin
  36. while L <> nil do
  37. begin
  38. WriteLn(L^.Key);
  39. L := L^.N;
  40. end;
  41. end;
  42. procedure PrintP(L:PRec);
  43. var
  44. c : Prec;
  45. begin
  46. c := L;
  47. while c^.n <> nil do c:=c^.n;
  48. while c^.p <> nil do begin WriteLn(C^.key);c:=c^.p;end;
  49. end;
  50. var
  51. Li,eLi : PRec;
  52. mN : PRec;
  53. begin
  54. New(Li);
  55. Li^.n:=nil;Li^.p:=nil;
  56. eLi := Li;
  57. Assign(Input,'bsort.txt');
  58. Reset(Input);
  59. while not eof do
  60. begin
  61. New(mN);Read(mN^.key);
  62. mN^.p := eLi;
  63. mN^.n := nil;
  64. eLi^.n := mN;
  65. eLi := mN;
  66. end;
  67. Close(Input);
  68. Assign(OutPut,'bsort.out');
  69. Rewrite(Output);
  70. WriteLn('Not sorted, strait order:');
  71. PrintN(Li^.N);
  72. WriteLn('Not sorted, reverse order:');
  73. PrintP(Li);
  74. BSort(li);
  75. WriteLn('Sorted, strait order:');
  76. PrintN(Li^.N);
  77. WriteLn('Sorted, reverse order:');
  78. PrintP(Li);
  79. Close(OutPut);
  80. while Li<> nil do
  81. begin
  82. eLi := Li^.N;
  83. Dispose(Li);
  84. Li:=eLi;
  85. end;
  86. end.