Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2021
Помог: 0 раз(а)
Здравствуйте, у меня возникла проблема, не могу реализовать данное задание на php:
Дан массив A размера N. Упорядочить его по возрастанию методом сортировки простыми вставками: сравнить элементы A1 и A2, при необходимости меняя их местами, добиться того, чтобы они оказались упорядоченными по возрастанию; затем обратиться к элементу A3 переместить его в левую (уже упорядоченную) часть массива, сохранив ее упорядоченность; повторить этот процесс для остальных элементов, выводя содержимое массива после обработки каждого элемента (от 2-го до N-го). При выполнении описанных действий удобно использовать прием «барьера», записывая очередной элемент перед его обработкой в дополнительный элемент массива A0.
У меня, кстати, очень и очень криво получилось написать код на С (но это прям фиаско):
void Sort(int* arr,int n){ //ф-я сортировки, в нее передается указатель на массив(имя без квадратных скобок) и кол-во эл-в не совсем рационально, но зато наглядно
int counter=0; //общее количество перестановок
for(int i=1;i<n;i++){//перебирается массив от начала до конца
for(int j=i; j>0 && arr[j-1]>arr[j];j--){ //собственно, сама суть сортировки, начиная с текущей позиции (i), текущий эл-т (j-й) сравнивается с предыдущим (j-1)
counter++; //если предыдущий больше текущего, наращивается счетчик перестановок (это не обязательная величина. да и сам шаг тоже не важен принципиально)
int tmp=arr[j-1]; //типичный
arr[j-1]=arr[j]; //обмен
arr[j]=tmp; //двух величин
cout<<arr[j]<<" ";
}
cout<<counter<<"-th iteration"<<endl;//выводится номер операции обмена. понятно, что, если на протяжении 2-х или 3-х шагов э-л ты стоят по-порядку, будет выводится одно и то же значение
}
cout<<counter<<"iterations total"<<endl;//сообщение об общем количестве обменов
}
int main()
{
int A[board];//массив, размерность задана глобальной константой
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
А в коде выше неясности: sort - это встроенная функция, как я понял. И зачем-то деление по модулю с генерацией псевдослучайного числа.
Добрый день!
в коде на языке С, Sort не встроенная функция, а самописная и её попросили перевести на PHP,
а деление по модулю с генерацией псевдослучайного числа для того чтобы получить исхоный массив А для тестирования этой функции. (Добавление)
Aleri пишет:
Здравствуйте, у меня возникла проблема, не могу реализовать данное задание на php:
function InsertionSort(&$arr,$n){//ф-я сортировки, в нее передается указатель на массив(имя без квадратных скобок) и кол-во эл-в не совсем рационально, но зато наглядно
$counter=0;//общее количество перестановок
for($i=1;$i<$n;$i++)
{
//перебирается массив от начала до конца
for($j=$i;$j>0 &&$arr[$j-1]>$arr[$j];$j--)
{//собственно, сама суть сортировки, начиная с текущей позиции ($i), текущий эл-т ($j-й) сравнивается с предыдущим ($j-1)
$counter++;//если предыдущий больше текущего, наращивается счетчик перестановок (это не обязательная величина. да и сам шаг тоже не важен принципиально)
$tmp=$arr[$j-1];//типичный
$arr[$j-1]=$arr[$j];//обмен
$arr[$j]=$tmp;//двух величин
echo$arr[$j]." ";
}
echo"номер операции обмена: $counter",endl;//выводится номер операции обмена. понятно, что, если на протяжении 2-х или 3-х шагов э-л ты стоят по-порядку, будет выводится одно и то же значение
}
echo"общем количестве обменов: $counter",endl;//сообщение об общем количестве обменов
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.