Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 9.31 KB | None | 0 0
  1. ===================ПРОСТЫЕ ВСТАВКИ===============
  2. program VstavkiProstSort;
  3.  
  4. {$APPTYPE CONSOLE}
  5.  
  6. uses
  7.   SysUtils;
  8.  
  9. type
  10.    TIntArray = array of Integer;
  11.  
  12. procedure InsertionSort(var Arr: TIntArray);
  13. var
  14.    i, j, buf: Integer;
  15. begin
  16.    for i := Low(Arr) + 1 to High(Arr) do
  17.    begin
  18.       buf := Arr[i];
  19.       j := i - 1;
  20.       while (j >= Low(Arr)) and (Arr[j] > buf) do
  21.       begin
  22.          Arr[j + 1] := Arr[j];
  23.          Dec(j);
  24.       end;
  25.       Arr[j + 1] := buf;
  26.    end;
  27. end;
  28.  
  29. var
  30.    Arr: TIntArray;
  31.    i, N: Integer;
  32. begin
  33.    WriteLn('N:');
  34.    ReadLn(N);
  35.    WriteLn('Massive:');
  36.    SetLEngth(Arr, N);
  37.    for i := 0 to High(Arr) do
  38.       Read(Arr[i]);
  39.    InsertionSort(Arr);
  40.    for i := 0 to High(Arr) do
  41.       Write(Arr[i], ' ');
  42.    Readln;
  43.    Readln;
  44. end.
  45. =================================================
  46.  
  47. ================СЛИЯНИЕ============================
  48. program SliianSort;
  49.  
  50. {$APPTYPE CONSOLE}
  51.  
  52. uses
  53.   SysUtils;
  54.  
  55. type
  56.     TArray =  array of Integer;
  57.  
  58. procedure MergeArrays(var Arr: TArray; leftPoint, midPoint, rightPoint: Integer);
  59. var
  60.    it1, it2: Integer;
  61.    result: TArray;
  62.    i: Integer;
  63. begin
  64.    it1 := 0;
  65.    it2 := 0;
  66.    SetLength(result, rightPoint - leftPoint);
  67.    while (leftPoint + it1 < midPoint) and (midPoint + it2 < rightPoint) do
  68.       if Arr[leftPoint + it1] < Arr[midPoint + it2] then
  69.       begin
  70.          result[it1 + it2] := Arr[leftPoint + it1];
  71.          Inc(it1);
  72.       end
  73.       else
  74.       begin
  75.          result[it1 + it2] := Arr[midPoint + it2];
  76.          Inc(it2);
  77.       end;
  78.    while leftPoint + it1 < midPoint do
  79.    begin
  80.       result[it1 + it2] := Arr[leftPoint + it1];
  81.       Inc(it1);
  82.    end;
  83.    while midPoint + it2 < rightPoint do
  84.    begin
  85.       result[it1 + it2] := Arr[midPoint + it2];
  86.       Inc(it2);
  87.    end;
  88.    for i := 0 to it1 + it2 - 1 do
  89.       Arr[leftPoint + i] := result[i];
  90. end;
  91.  
  92. procedure OutputArray(arr: TArray);
  93. var
  94.    i, maxIndex: Integer;
  95. begin
  96.    maxIndex := Length(arr) - 1;
  97.    for i := 0 to maxIndex do
  98.       Write(arr[i], ' ');
  99. end;
  100.  
  101. procedure NaturalMergeSort(var initArray: TArray);
  102. var
  103.    leftPoint, middlePoint, rightPoint, i: Integer;
  104.    isCorrect: Boolean;
  105. begin
  106.    isCorrect := True;
  107.    while isCorrect do
  108.    begin
  109.       rightPoint := 0;
  110.       while rightPoint < High(initArray) do
  111.       begin
  112.          i := rightPoint;
  113.          leftPoint := rightPoint;
  114.          while (initArray[i] <= initArray[i + 1]) and
  115.             (i + 1 <= High(initArray)) do
  116.             Inc(i);
  117.          Inc(i);
  118.          middlePoint := i;
  119.          isCorrect := middlePoint < Length(initArray);
  120.          if (leftPoint <> 0) and (i + 1 <= High(initArray)) then
  121.             isCorrect := True;
  122.          rightPoint := middlePoint + 1;
  123.          while (initArray[i] <= initArray[i + 1]) and
  124.             (i + 1 <= High(initArray)) do
  125.          begin
  126.             Inc(rightPoint);
  127.             Inc(i);
  128.          end;
  129.          if middlePoint < Length(initArray) then
  130.             MergeArrays(initArray, leftPoint, middlePoint, rightPoint);
  131.  
  132.       end;
  133.    end;
  134. end;
  135.  
  136. var
  137.     Arr: TArray;
  138.     Quantity, i: Integer;
  139. begin
  140.     Writeln('N:');
  141.     Readln(Quantity);
  142.     SetLength(Arr, Quantity);
  143.     Dec(Quantity);
  144.     for i := 0 to Quantity do
  145.         Read(Arr[i]);
  146.     NaturalMergeSort(Arr);
  147.     for i := 0 to Quantity do
  148.         Write(Arr[i], ' ');
  149.     Readln;
  150.     Readln;
  151. end.
  152. =================================================
  153.  
  154. ============ШЕЙКЕРНАЯ============================
  155. program ShakerSort;
  156.  
  157. {$APPTYPE CONSOLE}
  158.  
  159. uses
  160.   SysUtils;
  161.  
  162. procedure Swap(var Arr: array of Integer; i : Integer);
  163. var
  164.     buff: Integer;
  165. begin
  166.     buff := Arr[i];
  167.     Arr[i] := Arr[i - 1];
  168.     Arr[i - 1] := buff;
  169. end;
  170.  
  171. procedure Main;
  172. var
  173.     i, markLeft, markRight: Integer;
  174.     Arr: array of Integer;
  175. begin
  176.     Readln(markRight);
  177.     SetLength(Arr, markRight);
  178.     markLeft := 1;
  179.     Dec(markRight);
  180.     for i := 0 to markRight do
  181.         Read(Arr[i]);
  182.     while markLeft <= markRight do
  183.     begin
  184.         for i := markRight downto markLeft do
  185.             if Arr[i - 1] > Arr[i] then
  186.                 Swap(Arr, i);
  187.         Inc(markLeft);
  188.         for i := markLeft to markRight do
  189.             if Arr[i - 1] > Arr[i] then
  190.                 Swap(Arr, i);
  191.         Dec(markRight);
  192.     end;
  193.     for i := 0 to High(Arr) do
  194.         Write(Arr[i], ' ');
  195.     Readln;
  196.     Readln;
  197. end;
  198.  
  199. begin
  200.     Main;
  201. end.
  202. =================================================
  203.  
  204. ==============ПОРАЗРЯДНАЯ========================
  205. program RadixSort;
  206.  
  207. {$APPTYPE CONSOLE}
  208.  
  209. uses
  210.   SysUtils,
  211.   Math;
  212.  
  213. type
  214.    TIntArray = array of Integer;
  215.  
  216. function GetMaxOrder(DataArray: TIntArray): Integer;
  217. var
  218.    i: Byte;
  219.    MaxEl: Integer;
  220. begin
  221.    MaxEl := DataArray[0];
  222.    for i := 1 to High(DataArray) do
  223.       if DataArray[i] > MaxEl then
  224.          MaxEl := DataArray[i];
  225.    GetMaxOrder := Length(IntToStr(MaxEl));
  226. end;
  227.  
  228. function RadixSort(DataArr: TIntArray): TIntArray;
  229. var
  230.    i, j, k: Byte;
  231.    PosArr: array [0 .. 9] of array of Integer;
  232.    TempArray: TIntArray;
  233.    Dev: Integer;
  234.    MaxOrder: Integer;
  235. begin
  236.    MaxOrder := GetMaxOrder(DataArr);
  237.    Dev := 1;
  238.    Setlength(TempArray, Length(DataArr));
  239.    repeat
  240.       for i := 0 to High(DataArr) do
  241.       begin
  242.          Setlength(PosArr[(DataArr[i] div Dev) mod 10],
  243.             Length(PosArr[(DataArr[i] div Dev) mod 10]) + 1);
  244.          PosArr[(DataArr[i] div Dev) mod 10]
  245.            [ High(PosArr[(DataArr[i] div Dev) mod 10])] := i;
  246.       end;
  247.       Dev := Dev * 10;
  248.       k := 0;
  249.       for i := 0 to High(PosArr) do
  250.          if Length(PosArr[i]) <> 0 then
  251.          begin
  252.             for j := 0 to High(PosArr[i]) do
  253.             begin
  254.                TempArray[k] := DataArr[PosArr[i][j]];
  255.                Inc(k);
  256.             end;
  257.             Setlength(PosArr[i], 0);
  258.          end;
  259.       for i := 0 to High(DataArr) do
  260.          DataArr[i] := TempArray[i];
  261.    until Dev = Power(10, MaxOrder);
  262.    RadixSort := DataArr;
  263. end;
  264.  
  265. var
  266.    Arr: TIntArray;
  267.    i, N: Integer;
  268. begin
  269.    WriteLn('N:');
  270.    ReadLn(N);
  271.    SetLength(Arr, N);
  272.    for i := 0 to high(arr) do
  273.       read(arr[i]);
  274.    RadixSort(Arr);
  275.    for i := 0 to High(Arr) do
  276.       Write(Arr[i], ' ');
  277.    Readln;
  278.    Readln;
  279. end.
  280. ============================================
  281. ===============ХОАРА(QUICKSORT)=============
  282. program QSort;
  283.  
  284. {$APPTYPE CONSOLE}
  285.  
  286. uses
  287.   SysUtils;
  288.  
  289. procedure quickSort(var Arr: array of Integer; first, last: Integer);
  290. var
  291.     i, j, x, help: Integer;
  292. begin
  293.     x := Arr[(first + last) div 2];
  294.     i := first;
  295.     j := last;
  296.     while i<=j do
  297.     begin
  298.         while Arr[i] < x do
  299.             Inc(i);
  300.         while x < Arr[j] do
  301.             Dec(j);
  302.         if i <= j then
  303.         begin
  304.             help := Arr[i];
  305.             Arr[i] := Arr[j];
  306.             Arr[j] := help;
  307.             i := i+1;
  308.             j := j-1;
  309.         end;
  310.     end;
  311.     if first < j then quickSort(Arr, first, j);
  312.     if i < last then quickSort(Arr, i, last);
  313. end;
  314.  
  315.  
  316. procedure Main;
  317. var
  318.     Arr: array of Integer;
  319.     i, Quantity: Integer;
  320. begin
  321.     Readln(Quantity);
  322.     SetLength(Arr, Quantity);
  323.     Dec(Quantity);
  324.     for i := 0 to Quantity do
  325.         Read(Arr[i]);
  326.     quickSort(Arr, 0, Quantity);
  327.     for i := 0 to Quantity do
  328.         Write(Arr[i], ' ');
  329.     Readln;
  330.     Readln;
  331. end;
  332.  
  333. begin
  334.     Main;
  335. end.
  336. ===========================================
  337. ======ПРОСТОЙ ВЫБОР========================
  338. program prostVibor;
  339.  
  340. {$APPTYPE CONSOLE}
  341.  
  342. uses
  343.   SysUtils;
  344.  
  345. var
  346.     min, least, help, j, N: Integer;
  347.     Arr: array of Integer;
  348.  
  349. begin
  350.     Writeln('N:');
  351.     Read(N);
  352.     SetLength(Arr, N);
  353.     for j := 0 to High(Arr) do
  354.         Read(Arr[j]);
  355.     for min := 0 to High(Arr) do
  356.     begin
  357.         least := min;
  358.         for j := min + 1 to High(Arr) do
  359.             if (arr[j] < arr[least]) then
  360.                 least := j;
  361.         help := Arr[min];
  362.         Arr[min] := Arr[least];
  363.         Arr[least] := help;
  364.     end;
  365.     for j := 0 to High(Arr) do
  366.         Write(Arr[j], ' ');
  367.     Readln;
  368.     Readln;
  369. end.
  370. ============================================
  371. ===========ПОДСЧЕТ==========================
  372. program Podschet;
  373.  
  374. {$APPTYPE CONSOLE}
  375.  
  376. uses
  377.   SysUtils;
  378.  
  379. var
  380.    i, j, k, N: integer;
  381.    countingArray, answer: array of Integer;
  382.    ArrayOfNumbers : array of Integer;
  383. begin
  384.    WriteLn('N:');
  385.    ReadLn(N);
  386.    SetLength(ArrayOfNumbers, N);
  387.    WriteLn('Massive:');
  388.    for i := 0 to High(ArrayOfNumbers) do
  389.       Read(ArrayOfNumbers[i]);
  390.    Setlength(countingArray, N);
  391.    Setlength(answer, N);
  392.    for j := 0 to (Length(countingArray) - 1) do
  393.       CountingArray[j] := 0;
  394.    for j := 0 to (Length(ArrayOfNumbers) - 2) do
  395.       for k := (j + 1) to (Length(ArrayOfNumbers) - 1) do
  396.          if ArrayOfNumbers[j] > ArrayOfNumbers[k] then
  397.             Inc(CountingArray[j])
  398.          else
  399.             Inc(CountingArray [k]);
  400.    for j := 0 to (Length(CountingArray) - 1) do
  401.       for k := 0 to (Length(CountingArray) - 1) do
  402.          if j = CountingArray[k] then
  403.             Answer[j] := ArrayOfNumbers[k];
  404.    for i := 0 to High(ArrayOfNumbers) do
  405.       ArrayOfNumbers[i] := answer[i];
  406.    for i := 0 to High(ArrayOfNumbers) do
  407.         Write(ArrayOFNumbers[i], ' ');
  408.    Readln;
  409.    Readln;
  410. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement