Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Быстрая сортировка

22.07.2017, 12:14. Показов 1780. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прочитал код быстрой сортировки https://foxford.ru/wiki/inform... ara-pascal.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure sort(var ar: arrType; m, l: Integer);
var 
    i, j:Integer; 
    x, tmp: Real; 
begin 
    i := m; 
    j := l; 
    x := ar[(m+l) div 2]; 
    repeat 
        while ar[i] < x Do Inc(i); 
        while ar[j] > x Do Dec(j); 
        if i <= j then begin 
            tmp := ar[i]; 
            ar[i] := ar[j];
            ar[j] := tmp; 
            Inc(i);
            Dec(j)
        end
    until i > j;
    if m < j then // Если размер части не равен 1 то сортировать - правильно я понял?
        sort(ar, m, j); 
    if i < l then // Если размер части не равен 1 то сортировать - правильно я понял?
        sort(ar, i, l) 
end;
Добавлено через 2 минуты
Правильно ли я понимаю, что если индексы i и j наедут друг на друга, то это значит, что части отсортированы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2017, 12:14
Ответы с готовыми решениями:

Быстрая сортировка 2-х массивов
Есть 2 массива одной длины, 1-ый целочисленный, 2-ой строковый, нужно отсортировать один из этих массивов так, чтобы и второй массив...

Быстрая сортировка матрицы
Нужно написать процедуру сортировки матрицы с помощью &quot;быстрой сортировки&quot; . В матрице отсортировать столбцы по убыванию значений элементов...

Быстрая сортировка. В чем ошибка?
Program Bistraia; const n=600; var i : integer; var a:array of integer; procedure QSort(first, last: Integer ); var l, r, c, x:...

3
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
22.07.2017, 13:23
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Прочитал код быстрой сортировки
Так ты не то читаешь, прочитай что-то про алгоритм этой сортировки.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
23.07.2017, 10:19  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const
  n = 9;
 
var
  a: array of integer;
 
procedure QuickSort(var a: array of integer; left, right: integer);
var
  l_hold, r_hold, pivot: integer;
begin
  l_hold := left;
  r_hold := right;
  pivot := a[left];
  while left < right do
  begin
    while (a[right] >= pivot) and (left < right) do Dec(right);
    if left <> right then begin
      a[left] := a[right];
      Inc(left);
    end;
    while (a[left] <= pivot) and (left < right) do Inc(left);
    if left <> right then begin
      a[right] := a[left];
      Dec(right);
    end;
  end;
  a[left] := pivot;
  pivot := left;
  left := l_hold;
  right := r_hold;
  if left < pivot then QuickSort(a, left, pivot - 1);
  if right > pivot then QuickSort(a, pivot + 1, right);
end;
 
procedure Sort(a: array of integer):=QuickSort(a, 0, a.Length - 1);
 
begin
  SetLength(a, n);
  for var i := 0 to n - 1 do a[i] := Random(100);
  Writeln(a);
  Sort(a);
  Writeln(a);
end.
Добавлено через 16 часов 58 минут
Вот мне кажется самый понятный мне вариант нашел:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function quickSort(arr, low, high) {
        var i = low;                
        var j = high;
        var middle = arr[ Math.round(( low + high ) / 2) ];  // middle - опорный элемент; в нашей реализации он находится посередине между low и high
        
        do {
            while(arr[i] < middle)
              {
                ++i;  // ищем элементы для правой части
              } 
            while(arr[j] > middle)
              {
                --j;  // ищем элементы для левой части
              }
            if(i <= j){           
                // перебрасываем элементы
                var temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                // следующая итерация
                i++; j--;
            }
        } 
        while(i < j);
        
        if(low < j){
          // рекурсивно вызываем сортировку для левой части
          quickSort(arr, low, j);
        } 
 
        if(i < high){
          // рекурсивно вызываем сортировку для правой части
          quickSort(arr, i, high);
        } 
    }
Переписал на Pascal понял что и как:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const
  n = 3;
 
var
  a: array of integer;
 
procedure QuickSort(var a: array of integer; l, h: integer);
begin
  var i := l;
  var j := h;
  var m := a[Round((l + h) / 2)];
  
  repeat
    while a[i] < m do Inc(i);
    while a[j] > m do Dec(j);
    while i <= j do
    begin
      Swap(a[i], a[j]);
      Inc(i);Dec(j);
    end;
  until i >= j;
  
  if l < j then QuickSort(a, l, j);
  if i < h then QuickSort(a, i, h);
end;
 
procedure Sort(a: array of integer):=QuickSort(a, 0, a.Length - 1);
 
begin
  SetLength(a, n);
  for var i := 0 to n - 1 do a[i] := Random(100);
  Writeln(a);
  Sort(a);
  Writeln(a);
end.


Добавлено через 23 минуты
Не понимаю, что тут не так. Поторопился с выводами

Добавлено через 12 минут

Не по теме:

Тему можете удалить - другую создал с более корректным вопросом.

0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.07.2017, 11:59
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Вот мне кажется самый понятный мне вариант нашел:
Ты ищи не варианты кода, а описание алгоритма, найдешь, разберешься, код и сам напишешь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2017, 11:59
Помогаю со студенческими работами здесь

Быстрая сортировка, необходим счетчик перестановок
Куда в этой программе неоходимо вставить счетчик перестановок? и потом вывести его. program n1; const n = 7; var i, j, c,k4: integer;...

QuickSort: быстрая сортировка элементов (по методу Хоара)
Организуйте массив, состоящий из 20 различных целых чисел. После этого упорядочить отдельно чётные элементы (именно элементы, то есть по их...

Быстрая сортировка: "Программа завершена из-за переполнения программного стека"
Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека. Не могу понять, в чем дело....

быстрая сортировка
задан массив на 10000 элементов действительного типа. Упорядочить его за спадением его элементов. Результаты занести в текстовый файл....

Быстрая сортировка матрицы
Добрый день. Возникла необходимость выполнить сортировку методом быстрой сортировкой. Перечитал кучу сайтов, где описаны алгоритмы и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru