Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 23

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

23.10.2016, 13:13. Показов 1266. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать процедуру сортировки матрицы с помощью "быстрой сортировки" . В матрице отсортировать столбцы по убыванию значений элементов в строке с номером, заданным пользователем. Т. е. например есть матрица:
9 8 7
6 5 4
3 2 1
и пользователь ввел 1 (т.е. выбрал 1 строку для сортировки), тогда должно получиться:
7 8 9
4 5 6
1 2 3
Помогите пожалуйста, вопрос жизни и смерти!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2016, 13:13
Ответы с готовыми решениями:

Быстрая сортировка
Прочитал код быстрой сортировки https://foxford.ru/wiki/informatika/bystraya-sortirovka-hoara-pascal. procedure sort(var ar: arrType; m,...

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

Быстрая сортировка. В чем ошибка?
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
23.10.2016, 13:55
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
type mtr=array[,] of integer;
procedure sort(var x:mtr;kstr,nstr,lf,rg:integer);
//kstr-количество строк, nstr-номер заданной строки, lf-начало  строки,rg-конец
var
  i,j,k,x1,y1,m: integer;
begin
  i:=lf;
  j:=rg;
  m:=round ((lf+rg)/2);//средний элемент
  x1:=x[nstr,m];
  repeat
    while x[nstr,i]<x1 do inc(i);//пока левый меньше среднего, подвигоем левый край вправо 
    while x[nstr,j]>x1 do dec(j);//пока правый больше среднего, подвигаем правй край влево
    if i<=j then //если левый и правый срослись
     begin
      for k:=0 to kstr-1 do
       begin
        y1:=x[k,i];
        x[k,i]:=x[k,j];//меняем левый и правый
        x[k,j]:=y1;
       end;
      inc(i); //левый вправо
      dec(j); //правый влево
     end;
  until i>j;//конец одной перестановки
  if lf<j then sort(x,kstr,nstr,lf,j);{рекурсивно сортируем}
  if i<rg then sort(x,kstr,nstr,i,rg);{или левую или правую части}
end;
var a:mtr;
    m,n,ns,i,j:integer;
begin
randomize;
repeat
write('Количество строк m>1 m=');
readln(m);
until m>1;
repeat
write('Количество столбцов n>1 n=');
readln(n);
until n>1;
setlength(a,m,n);
writeln('Исходная матрица:');
for i:=0 to m-1 do
 begin
  for j:=0 to n-1 do
   begin
    a[i,j]:=random(50);
    write(a[i,j]:4);
   end;
  writeln;
 end;
repeat 
write('Номер строки от 1 до ',n,' ns=');
readln(ns);
until ns in [1..n];
ns:=ns-1;//переходим к динамическому массиву 
sort(a,m,ns,0,n-1);
writeln('Сортировка столбцов по неубыванию:');
for i:=0 to m-1 do
 begin
  for j:=0 to n-1 do
  write(a[i,j]:4);
  writeln
 end;
end.
0
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 23
23.10.2016, 15:35  [ТС]
А как это будет выглядеть без использования динамического массива?
Т.е. уже есть вот это
Pascal
1
2
3
4
5
const
nmax = 10;
type
mas = array [1..nmax] of integer;
matr = array [1..nmax, 1..nmax] of integer;
И в задании же надо отсортировать, столбцы по убыванию значений элементов в строке с номером, заданным пользователем, а тут:
Pascal
1
writeln('Сортировка столбцов по неубыванию:');
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.10.2016, 15:43
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Тьфу на вас бестолковых, сменить знаки > на < и < на >, да поменять индексы с 0 на 1, а m-1,n-1 на m,n и то ума нету.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
type mtr=array[1..10,1..10] of integer;
procedure sort(var x:mtr;kstr,nstr,lf,rg:integer);
//kstr-количество строк, nstr-номер заданной строки, lf-начало  строки,rg-конец
var
  i,j,k,x1,y1,m: integer;
begin
  i:=lf;
  j:=rg;
  m:=round ((lf+rg)/2);//средний элемент
  x1:=x[nstr,m];
  repeat
    while x[nstr,i]>x1 do inc(i);//пока левый больше среднего, подвигоем левый край вправо 
    while x[nstr,j]<x1 do dec(j);//пока правый меньше среднего, подвигаем правй край влево
    if i<=j then //если левый и правый срослись
     begin
      for k:=1 to kstr do
       begin
        y1:=x[k,i];
        x[k,i]:=x[k,j];//меняем левый и правый
        x[k,j]:=y1;
       end;
      inc(i); //левый вправо
      dec(j); //правый влево
     end;
  until i>j;//конец одной перестановки
  if lf<j then sort(x,kstr,nstr,lf,j);{рекурсивно сортируем}
  if i<rg then sort(x,kstr,nstr,i,rg);{или левую или правую части}
end;
var a:mtr;
    m,n,ns,i,j:integer;
begin
randomize;
repeat
write('Количество строк от 2 до 10 m=');
readln(m);
until m in [2..10];
repeat
write('Количество столбцов от 2 до 10 n=');
readln(n);
until n in [2..10];
writeln('Исходная матрица:');
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(50);
    write(a[i,j]:4);
   end;
  writeln;
 end;
repeat 
write('Номер строки от 1 до ',n,' ns=');
readln(ns);
until ns in [1..n];
sort(a,m,ns,1,n);
writeln('Сортировка столбцов по убыванию:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln
 end;
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2016, 15:43
Помогаю со студенческими работами здесь

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

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

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

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

Быстрая сортировка Хоара
Пом-гите решить, заранее благодарен Билет 4 1 Быстрая сортировка Хоара.


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

Или воспользуйтесь поиском по форуму:
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