Форумы-->Форум для внеигровых тем-->
| Автор | Паскаль.программа |
Помогите пожалуйста.
Дана матрица(двумерный массив)
вначале с помощью случайных чисел задаем его ввиде таблицы.
Далее надо отсортировать числа в каждой строке в порядке возрастания! | program massive
begin
set a,b
randomize
end | как с помощью произвольных чисел заполнить массив 10на 10 я знаю0
я что-то туплю как отсортировать числа в порядке возрастании в каждой строке массива) | | Методом пузырька | program massive
begin
set a,b
randomize
end
+1
var mas: array[1..100,1..100] of integer;
a,b,i,j:integer;
begin
randomize;
readln(a,b);
for i:=1 to a do
begin
for j:=1 to b do
begin
mas[i,j]:=random(100);
end;
end;
тут думай сам, метод пузырька в помощь.
end. | я что-то туплю как отсортировать числа в порядке возрастании в каждой строке массива)
Методом пузырька для каждой строчки... | | Наладчик херни не посоветует... | | а для того чтобы каждую строку сортировать нужно только j и i использовать или как задавать строки матрицы? | Пузырек ацтой!
Быстрая сортировка нерекурсивный алгоритм:
const N=100; {Количество элементов массива}
var a: array[1..N] of integer; {массив}
type
Pstack=^stack;
stack=record
l,r: integer;
prev: Pstack;
end;
var last: Pstack;
l,r: integer;
procedure InStack (l,r: integer);
{Помещение элемента в стек}
var buf: Pstack;
begin
buf:=last;
New (last);
last^.prev:=buf;
last^.l:=l;
last^.r:=r;
end;
function GetStack (var l,r: integer): boolean;
{Выборка элемента из стека, возвращает флаг успеха}
var buf: Pstack;
begin
if last<>NIL then
begin
l:=last^.l;
r:=last^.r;
buf:=last;
last:=last^.prev;
Dispose (buf);
GetStack:=true;
end else GetStack:=false;
end;
procedure divide (l,r: integer);
l,r: integer;
{Подготовка и собственно разбиение подмассива
(индексы элементов l..r)на части}
var b: integer; {Элемент, по которому происходит разбиение}
up, down: integer; {Индексы элементов массива:
после up все элементы не меньше a
до down все элементы не больше a
}
c: integer;
begin
b:=a[l];
up:=l+1;
down:=r;
while up<down {пока up с down не сошлись}
do begin
if a[up]<b then up:=up+1 else
{Если up можно увеличить, мы это делаем}
if a[down]>b then down:=down-1 else
{Если down можно уменьшить, мы это делаем}
begin {Иначе, просто поменяем элементы местами->
тогда можно будет изменить и up, и down}
c:=a[up];
a[up]:=a[down];
a[down]:=c;
end;
end;
{Слева от up=down все элементы меньше или равны b,
а справа больше или равны b}
if a[up]>b then up:=up-1;
{Теперь можно поменять местами a[up] и a[l]}
c:=a[up];
a[up]:=a[l];
a[l]:=c;
{Элемент a[up] является разделителем для метода быстрой сортировки}
if up-l>r-up then {Последним поместим в стек индексы части массива
меньшей длины}
begin
if up-l>=2 then InStack(l,up-1);{InStack - добавить в стек}
if r-up>=2 then InStack(up+1,r);
end else
begin
if r-up>=2 then InStack(up+1,r);
if up-l>=2 then InStack(l,up-1);
end;
end;
.................................
{Собственно сортировка}
last:=NIL;
InStack (1,N);
while (GetStack (l,r)) do {Пока стек не пуст}
divide (l,r); {Производим деление для сортировки} | | мне на паскале нужно(а это по-моему не он? | для Niagar-2011:
Да нет же, он самый. в {} комментарии. Они помогут разобраться. | | а кто-нить для программы некрольма продолжение может написать?) | Никто не хочет написать?)
Заплачу! |
К списку тем
|