Advertisement
Falxns

сортировки

Dec 11th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. СОРТИРОВКА ПОДСЧЁТОМ------------------------------------------------
  2. var
  3.    i, j, k, N: integer;
  4.    countingArray, answer: array of Integer;
  5.    ArrayOfNumbers : array of Integer;
  6. begin
  7.    WriteLn('N:');
  8.    ReadLn(N);
  9.    SetLength(ArrayOfNumbers, N);
  10.    WriteLn('Massive:');
  11.    for i := 0 to High(ArrayOfNumbers) do
  12.       ReadLn(ArrayOfNumbers[i]);
  13.    Setlength(countingArray, N);
  14.    Setlength(answer, N);
  15.    for j := 0 to (Length(countingArray) - 1) do
  16.       CountingArray[j] := 0;
  17.    for j := 0 to (Length(ArrayOfNumbers) - 2) do
  18.       for k := (j + 1) to (Length(ArrayOfNumbers) - 1) do
  19.          if ArrayOfNumbers[j] > ArrayOfNumbers[k] then
  20.             Inc(CountingArray[j])
  21.          else
  22.             Inc(CountingArray [k]);
  23.    for j := 0 to (Length(CountingArray) - 1) do
  24.       for k := 0 to (Length(CountingArray) - 1) do
  25.          if j = CountingArray[k] then
  26.             Answer[j] := ArrayOfNumbers[k];
  27.    for i := 0 to High(ArrayOfNumbers) do
  28.       ArrayOfNumbers[i] := answer[i];
  29.    OutputArray(ArrayOfNumbers);
  30.    ReadLn;
  31. end.
  32.  
  33. ПОРАЗРЯДНАЯ СОРТИРОВКА----------------------------------
  34.  
  35. uses
  36.    SysUtils, Math;
  37.  
  38. type
  39.    TIntArray = array of Integer;
  40.  
  41. function GetMaxOrder(DataArray: TIntArray): Integer;
  42. var
  43.    i: Byte;
  44.    MaxEl: Integer;
  45. begin
  46.    MaxEl := DataArray[0];
  47.    for i := 1 to High(DataArray) do
  48.       if DataArray[i] > MaxEl then
  49.          MaxEl := DataArray[i];
  50.    GetMaxOrder := Length(IntToStr(MaxEl));
  51. end;
  52.  
  53. function RadixSort(DataArr: TIntArray): TIntArray;
  54. var
  55.    i, j, k: Byte;
  56.    PosArr: array [0 .. 9] of array of Integer;
  57.    TempArray: TIntArray;
  58.    Dev: Integer;
  59.    MaxOrder: Integer;
  60. begin
  61.    MaxOrder := GetMaxOrder(DataArr);
  62.    Dev := 1;
  63.    Setlength(TempArray, Length(DataArr));
  64.    repeat
  65.       for i := 0 to High(DataArr) do
  66.       begin
  67.          Setlength(PosArr[(DataArr[i] div Dev) mod 10],
  68.             Length(PosArr[(DataArr[i] div Dev) mod 10]) + 1);
  69.          PosArr[(DataArr[i] div Dev) mod 10]
  70.            [ High(PosArr[(DataArr[i] div Dev) mod 10])] := i;
  71.       end;
  72.       Dev := Dev * 10;
  73.       k := 0;
  74.       for i := 0 to High(PosArr) do
  75.          if Length(PosArr[i]) <> 0 then
  76.          begin
  77.             for j := 0 to High(PosArr[i]) do
  78.             begin
  79.                TempArray[k] := DataArr[PosArr[i][j]];
  80.                Inc(k);
  81.             end;
  82.             Setlength(PosArr[i], 0);
  83.          end;
  84.       for i := 0 to High(DataArr) do
  85.          DataArr[i] := TempArray[i];
  86.    until Dev = Power(10, MaxOrder);
  87.    RadixSort := DataArr;
  88. end;
  89.  
  90. var
  91.    Arr: TIntArray;
  92.    i, N: Integer;
  93. begin
  94.    WriteLn('N:');
  95.    ReadLn(N);
  96.    SetLength(Arr, N);
  97.    for i := 0 to high(arr) do
  98.       readln(arr[i]);
  99.    RadixSort(Arr);
  100.    for i := 0 to High(Arr) do
  101.       Write(Arr[i], ' ');
  102.    Readln;
  103. end.
  104.  
  105.  
  106. ШЕЙКЕРНАЯ СОРТИРОВКА------------------------------------------
  107.  
  108. Var
  109.    ArrayOfNumbers: array of Integer;
  110.    N, i, step, temp, NumberOfPairs: Integer;
  111.  
  112. procedure OutputArray(ArrayOfNumbers: array of Integer);
  113. var
  114.    i: Integer;
  115. begin
  116.    for i := 0 to (Length(ArrayOfNumbers) - 1) do
  117.       Write(ArrayOfNumbers[i],' ');
  118.    WriteLn;
  119. end;
  120.  
  121. begin
  122.    WriteLn('Введите размер массива:');
  123.    ReadLn(N);
  124.    SetLength(ArrayOfNumbers, N);
  125.    WriteLn('Введите массив:');
  126.    for i := 0 to (Length(ArrayOfNumbers) - 1) do
  127.       ReadLn(ArrayOfNumbers[i]);
  128.    i := 0;
  129.    step := 1;
  130.    WriteLn('Пошаговая детализация:');
  131.    OutputArray(ArrayOfNumbers);
  132.    for NumberOfPairs := (Length(ArrayOfNumbers) - 1) downto 0 do
  133.    begin
  134.       i := i + step;
  135.       while (i > 0) and (i < (Length(ArrayOfNumbers) - 1)) do
  136.       begin
  137.          if (ArrayOfNumbers[i + step] - ArrayOfNumbers[i]) * step < 0 then
  138.          begin
  139.             temp := ArrayOfNumbers[i];
  140.             ArrayOfNumbers[i] := ArrayOfNumbers[i + step];
  141.             ArrayOfNumbers[i + step] := temp;
  142.             OutputArray(ArrayOfNumbers);
  143.          end;
  144.          i := i + step;
  145.       end;
  146.       step := -step;
  147.    end;
  148.    ReadLn;
  149. end.
  150.  
  151. СОРТИРОВКА ЕСТЕСТВЕННЫМ СЛИЯНИЕМ------------------------
  152.  
  153.  
  154. procedure MergeArrays(var Arr: TArray;
  155.    leftPoint, midPoint, rightPoint: Integer);
  156. var
  157.    it1, it2: Integer;
  158.    result: TArray;
  159.    i: Integer;
  160. begin
  161.    it1 := 0;
  162.    it2 := 0;
  163.    SetLength(result, rightPoint - leftPoint);
  164.    while (leftPoint + it1 < midPoint) and (midPoint + it2 < rightPoint) do
  165.       if Arr[leftPoint + it1] < Arr[midPoint + it2] then
  166.       begin
  167.          result[it1 + it2] := Arr[leftPoint + it1];
  168.          Inc(it1);
  169.       end
  170.       else
  171.       begin
  172.          result[it1 + it2] := Arr[midPoint + it2];
  173.          Inc(it2);
  174.       end;
  175.    while leftPoint + it1 < midPoint do
  176.    begin
  177.       result[it1 + it2] := Arr[leftPoint + it1];
  178.       Inc(it1);
  179.    end;
  180.    while midPoint + it2 < rightPoint do
  181.    begin
  182.       result[it1 + it2] := Arr[midPoint + it2];
  183.       Inc(it2);
  184.    end;
  185.    for i := 0 to it1 + it2 - 1 do
  186.       Arr[leftPoint + i] := result[i];
  187. end;
  188.  
  189. procedure OutputArray(arr: TArray);
  190. var
  191.    i, maxIndex: Integer;
  192. begin
  193.    maxIndex := Length(arr) - 1;
  194.    for i := 0 to maxIndex do
  195.       Write(arr[i], ' ');
  196. end;
  197.  
  198. procedure NaturalMergeSort(var initArray: TArray);
  199. var
  200.    leftPoint, middlePoint, rightPoint, i: Integer;
  201.    isCorrect: Boolean;
  202. begin
  203.    middlePoint := 0;
  204.    isCorrect := True;
  205.    while isCorrect do
  206.    begin
  207.       rightPoint := 0;
  208.       while rightPoint < High(initArray) do
  209.       begin
  210.          i := rightPoint;
  211.          leftPoint := rightPoint;
  212.          while (initArray[i] <= initArray[i + 1]) and
  213.             (i + 1 <= High(initArray)) do
  214.             Inc(i);
  215.          Inc(i);
  216.          middlePoint := i;
  217.          isCorrect := middlePoint < Length(initArray);
  218.          if (leftPoint <> 0) and (i + 1 <= High(initArray)) then
  219.             isCorrect := True;
  220.          rightPoint := middlePoint + 1;
  221.          while (initArray[i] <= initArray[i + 1]) and
  222.             (i + 1 <= High(initArray)) do
  223.          begin
  224.             Inc(rightPoint);
  225.             Inc(i);
  226.          end;
  227.          if middlePoint < Length(initArray) then
  228.             MergeArrays(initArray, leftPoint, middlePoint, rightPoint);
  229.          Write('Intermediate array: ');
  230.          OutputArray(initArray);
  231.          Writeln;
  232.       end;
  233.    end;
  234. end;
  235.  
  236. СОРТИРОВКА ПРОСТЫМИ ВСТАВКАМИ--------------------------
  237.  
  238.  
  239. type
  240.    TIntArray = array of Integer;
  241.  
  242. procedure InsertionSort(var Arr: TIntArray);
  243. var
  244.    i, j, buf: Integer;
  245. begin
  246.    for i := Low(Arr) + 1 to High(Arr) do
  247.    begin
  248.       buf := Arr[i];
  249.       j := i - 1;
  250.       while (j >= Low(Arr)) and (Arr[j] > buf) do
  251.       begin
  252.          Arr[j + 1] := Arr[j];
  253.          Dec(j);
  254.       end;
  255.       Arr[j + 1] := buf;
  256.    end;
  257. end;
  258.  
  259. var
  260.    Arr: TIntArray;
  261.    i, N: Integer;
  262. begin
  263.    WriteLn('N:');
  264.    ReadLn(N);
  265.    WriteLn('Massive:');
  266.    SetLEngth(Arr, N);
  267.    for i := 0 to High(Arr) do
  268.       ReadLn(Arr[i]);
  269.    InsertionSort(Arr);
  270.    for i := 0 to High(Arr) do
  271.       Write(Arr[i], ' ');
  272.    Readln;
  273. end.
  274.  
  275.  
  276. СОРТИРОВКА ПРОСТЫМ ВЫБОРОМ ------------------------------------
  277.  
  278. public static void sort(int[] arr) {
  279.     for (int min = 0; min < arr.length - 1; min++) {
  280.         int least = min;
  281.         for (int j = min + 1; j < arr.length; j++) {
  282.             if (arr[j] < arr[least]) {
  283.                 least = j;
  284.             }
  285.         }
  286.             int tmp = arr[min];
  287.             arr[min] = arr[least];
  288.             arr[least] = tmp;
  289.     }
  290. }
  291. QUICK_SORT----------------------------------
  292.  
  293. procedure qSort(var A: TArray; min, max: Integer);
  294. var i, j, supp, tmp: Integer;
  295. begin
  296. supp:=A[max-((max-min) div 2)];
  297. i:=min; j:=max;
  298. while i<j do
  299.   begin
  300.     while A[i]<supp do i:=i+1;
  301.     while A[j]>supp do j:=j-1;
  302.     if i<=j then
  303.       begin
  304.         tmp:=A[i]; A[i]:=A[j]; A[j]:=tmp;
  305.         i:=i+1; j:=j-1;
  306.       end;
  307.   end;
  308. if min<j then qSort(A, min, j);
  309. if i<max then qSort(A, i, max);
  310. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement