C/C++
O(n) - безо всякой сортировки.
Как преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные.
lazarus
j := n;
for i := n downto 1 do
if arr[i] 0 then begin
arr[j] := arr[i];
dec(j)
end;
for i := j downto 1 do arr[i] := 0;
Это если индексы массива arr: 1..nO(n) - безо всякой сортировки.
в цикле если значение 0-то в начало другого массива,если нет- то в конец, потом перенеси в исходный массив,если это нужно
лазарус.... всё
В Lazarus вы можете использовать функцию TArray.Sort, чтобы отсортировать массив таким образом. Например:
Copy code
uses SysUtils;
procedure SortArray(var arr: array of Integer);
begin
TArray.Sort<Integer>(arr, TComparer<Integer>.Construct(
function(const L, R: Integer): Integer
begin
if L = 0 then
Exit(-1);
if R = 0 then
Exit(1);
Result := 0;
end
));
end;
var
arr: array of Integer;
begin
arr := [0, 1, 2, 0, 3, 0, 4, 5];
SortArray(arr);
WriteLn(arr); // [0, 0, 0, 1, 2, 3, 4, 5]
end.
В этом коде функция SortArray принимает массив arr в качестве аргумента и использует функцию TArray.Sort для сортировки элементов этого массива.
Copy code
uses SysUtils;
procedure SortArray(var arr: array of Integer);
begin
TArray.Sort<Integer>(arr, TComparer<Integer>.Construct(
function(const L, R: Integer): Integer
begin
if L = 0 then
Exit(-1);
if R = 0 then
Exit(1);
Result := 0;
end
));
end;
var
arr: array of Integer;
begin
arr := [0, 1, 2, 0, 3, 0, 4, 5];
SortArray(arr);
WriteLn(arr); // [0, 0, 0, 1, 2, 3, 4, 5]
end.
В этом коде функция SortArray принимает массив arr в качестве аргумента и использует функцию TArray.Sort для сортировки элементов этого массива.
template<class T>
void setZeroToStart(T *array, int size)
{
T TempArr[size]; int iterator = 0; int countOfZeros = 0;
for(int i = 0; i < size; i++)
{
if(array[i] != 0)
{
TempArr[iterator] = array[i];
iterator++ ;
}
else
{
countOfZeros++ ;
};
};
for(int i = 0; i < countOfZeros; i++)
{
array[i] = 0;
};
for(int i = countOfZeros; i < size; i++)
{
array[i] = TempArr[i - countOfZeros];
};
for(int i = 0; i < size; i ++)
{
std::cout << array [i] << " ";
};
std::cout << std::endl;
};
void setZeroToStart(T *array, int size)
{
T TempArr[size]; int iterator = 0; int countOfZeros = 0;
for(int i = 0; i < size; i++)
{
if(array[i] != 0)
{
TempArr[iterator] = array[i];
iterator++ ;
}
else
{
countOfZeros++ ;
};
};
for(int i = 0; i < countOfZeros; i++)
{
array[i] = 0;
};
for(int i = countOfZeros; i < size; i++)
{
array[i] = TempArr[i - countOfZeros];
};
for(int i = 0; i < size; i ++)
{
std::cout << array [i] << " ";
};
std::cout << std::endl;
};
Артём Бычков
В конце cout после теста остался, если хочешь можешь убрать.
Похожие вопросы
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- С++ | Как заменить макс. элементы (могут быть введены любые) массива на нули и вывести изменённый массив уже с нолями?!
- Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.
- С++ создать массив из элементов каждый из которых равен среднеарефметическому четных элементов каждого столбца
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Дан массив из N элементов (N < 1000), причем N - четное. Вставить в середину массива сумму всех элементов.
- Как работать с элементами динамического массива из функции?
- Массив Х [36] целых элементов задать датчиком случайных чисел.
- Задачка по СИ на вставку элемента в динамический массив.
- В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива
i,n,min,max,nmax,S:integer;
s1,s2,s3:string;
begin
S:=0;
s1:='A: ';
s2:='Min:';
s3:='Sum:';
memo1.clear;
n:=strtoint(edit1.text);
setlength(a,n);
randomize;
for i:=0 to n-1 do
begin
a[i]:=random(20);
s1:= s1 + ' ' + floattostr(a[i]);
end;
memo1.lines.add(s1);
min:=a[1];
for i:=0 to n-1 do
if a[i]<min then
min:=a[i];
s2:= s2 + ' ' + floattostr(min);
memo1.lines.add(s2);
max:=a[1];
for i:=0 to n-1 do
if a[i] > max
then
begin
max:=a[i];
nmax:=i;
end;
for i:=nmax+1 to n-1 do
S:=S+a[i];
s3:= s3 + ' ' + floattostr(S);
memo1.lines.add(s3);
end;
нужно преобразовать эту прогу