М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
танюша237
танюша237
16.04.2020 18:24 •  Информатика

Алгоритм поразрядной сортировки от младшего разряда к старшему (LSD) C++.
Нужно отсортировать НЕ ЦЕЛОЧИСЛЕННЫЙ МАССИВ, а список людей. Программа уже как три дня готова, но в ней не хватает алгоритма поразрядной сортировки от младшего разряда к старшему (LSD).
Напишите код самой сортировки.

👇
Ответ:
husanov18p06h9l
husanov18p06h9l
16.04.2020

Итак, предложенная сортировка является устойчивой. Сортировать будем целые 32 битные числа. Для работы потребуется ~(n+4Кбайт) дополнительной памяти, что несколько расточительно, но позволяет добиться некоторого увеличения производительности.

В данной разновидности LSD не используются сравнения и обмены, алгоритм полностью линеен. Вычислительная сложность O(N).

4,4(71 оценок)
Ответ:
maksim20081986
maksim20081986
16.04.2020

Объяснение:

Попробуй sort

4,6(10 оценок)
Открыть все ответы
Ответ:
fizik24
fizik24
16.04.2020
//PascalABC.NET 3.0, сборка 1088
begin
  var a:=ReadLines('infile.txt').ToArray;
  var n:=a.Length;
  Writeln('*** Исходная информация ***');
  // фамилия, имя, возраст, рост, вес
  a.PrintLn(NewLine);
  Writeln('*** Задание 1 ***');
  var sves:real:=0;
  var srost:real:=0;
  foreach var s in a do begin
    srost+=StrToFloat(s.ToWords.ElementAt(3));
    sves+=StrToFloat(s.ToWords.ElementAt(4))
    end;
  Writeln('Средний рост равен ',srost/n:5:1);
  Writeln('Средний вес равен ',sves/n:4:1);
  srost/=n; sves/=n;
  Writeln('*** Задание 2 ***');
  var f2:=OpenWrite('rost.txt');
  foreach var s in a do begin
    var ss:=s.ToWords;
    var rost:=StrToFloat(ss.ElementAt(3));
    if rost>srost then begin
      var s0:=ss.Take(3).ToArray;
      var s1:=s0[0]+' '+s0[1]+', '+s0[2];
      Writeln(s1);
      Writeln(f2,s1)
      end
    end;
  f2.Close;
  Writeln('*** Задание 3 ***');
  f2:=OpenWrite('ves.txt');
  foreach var s in a do begin
    var ss:=s.ToWords;
    var ves:=StrToFloat(ss.ElementAt(4));
    if ves<sves then begin
      var s0:=ss.Take(3).ToArray;
      var s1:=s0[0]+' '+s0[1]+', '+s0[2];
      Writeln(s1);
      Writeln(f2,s1)
      end
    end;
  f2.Close
end.

Тестовое решение:
*** Исходная информация ***
Иванов Игорь 14 158 47.4
Петров Павел 14 161 58.3
Козлов Кирилл 15 160 60.3
Сидорова Мария 14 156 45.9
Тяпкина Наталья 15 158 46
Ляпкин Алексей 15 161 58.6
Мамочкин Константин 14 157 52.8
*** Задание 1 ***
Средний рост равен 158.7
Средний вес равен 52.8
*** Задание 2 ***
Петров Павел, 14
Козлов Кирилл, 15
Ляпкин Алексей, 15
*** Задание 3 ***
Иванов Игорь, 14
Сидорова Мария, 14
Тяпкина Наталья, 15
4,7(46 оценок)
Ответ:
БогданКК
БогданКК
16.04.2020
{ Free Pascal - fpc 2.6.4 }
var
  i,n:integer;
  A,B:array of integer;
  p:longint;
begin
  Write('Число элементов в векторах='); Read(n);
  Randomize;
  SetLength(A,n);
  Writeln('Вектор A');
  for i:=0 to n-1 do begin A[i]:=Random(51)-25; Write(A[i],' ') end;
  Writeln;
  SetLength(B,n);
  p:=0;
  Writeln('Вектор B');
  for i:=0 to n-1 do begin
    B[i]:=Random(51)-25;
    Write(B[i],' ');
    p:=p+A[i]*B[i]
    end;
  Writeln;
  Writeln('Скалярное произведение равно ',p);
end.

Тестовое решение:
Число элементов в векторах=15
Вектор A
-16 -6 -1 6 -6 7 22 4 16 19 3 -21 19 22 7
Вектор B
21 21 -2 -8 -3 25 -4 20 6 -11 8 10 -16 -16 19
Скалярное произведение равно -1145
4,4(1 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ