Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Внизмассивы в делфи Найти похожие ветки
← →
KaTH (2005-10-27 23:12) [0]понесли девушку на ВМС МИРЭА, теперь сидит мучается... подскажите пожалуйста идейку как решается следуйщее
Дан массив А из Н целых чисел переставить эллементы сассива так, чтобы вначале шла группа эллементов больших того элемента кот., в исходном массиве распологается на первом месте, затем сам этот элемент, потом группа элементов меньших или равных ему. Число сравнений и перемещений для каждого в отдельности не должно превышать Н-1
← →
Германн © (2005-10-28 01:51) [1]2 Девушка
Сначала научись меньше пить, потом научись излагать свои мысли. Не хило бы было и научиться "попадать на клавиши"!
← →
skiph © (2005-10-28 04:23) [2]С такой постановкой задача не решаема, поскольку на ряд элементов нужно будет 2 сравнения: скажем, больше ли он первого элемента и, если - нет, равен ли он этому элементу.
Могу предложить только такой вариант:
Var a,a_copy:array[1..H] of integer (byte, real,...)
i, b,e:integer;
begin
// получаем данные
b:=1; // будем заполнять одновременно с конца и с начала
e:=H;
for i:=2 to H do
if a[i]>a[1] then // элемент больше, значит в начало
begin
a_copy[b]:=a[i];
inc(b);
end
else
if a[i]<a[1] then // сравнение нужно, поскольку в массиве могут быть элементы и равные а[1]
begin
a_copy[e]:=a[i];
dec(e);
end;
// Все! Осталось только заполнить серединку элементами, равными а[1]
for i:=b to e do
a_copy[i]:=a[1];
В a_copy - результат
← →
TUser © (2005-10-28 08:37) [3]Это ж QuickSort недоделанный
var i, j: integer;
a0: integer;
begin
i:=0; j:=H-1;
a0:=A[0];
repeat
while A[i] < a0 do inc (i);
while A[j] > a0 do dec (j);
if i <= j then begin
Swap (A[i],A[j]);
inc (i); dec (j);
end;
until i < j;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c