Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Php массивы
Форумы портала PHP.SU » » Вопросы новичков » Php массивы

Страниц (1): [1]
 

1. Aleri - 01 Февраля, 2021 - 23:04:33 - перейти к сообщению
Здравствуйте, у меня возникла проблема, не могу реализовать данное задание на php:

Дан массив A размера N. Упорядочить его по возрастанию методом сортировки простыми вставками: сравнить элементы A1 и A2, при необходимости меняя их местами, добиться того, чтобы они оказались упорядоченными по возрастанию; затем обратиться к элементу A3 переместить его в левую (уже упорядоченную) часть массива, сохранив ее упорядоченность; повторить этот процесс для остальных элементов, выводя содержимое массива после обработки каждого элемента (от 2-го до N-го). При выполнении описанных действий удобно использовать прием «барьера», записывая очередной элемент перед его обработкой в дополнительный элемент массива A0.

У меня, кстати, очень и очень криво получилось написать код на С (но это прям фиаско):

CODE (htmlphp):
скопировать код в буфер обмена
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #define board 20
  5. using namespace std;
  6. void Sort(int* arr,int n){ //ф-я сортировки, в нее передается указатель на массив(имя без квадратных скобок) и кол-во эл-в не совсем рационально, но зато наглядно
  7. int counter=0; //общее количество перестановок
  8. for(int i=1;i<n;i++){ //перебирается массив от начала до конца
  9. for(int j=i; j>0 && arr[j-1]>arr[j];j--){ //собственно, сама суть сортировки, начиная с текущей позиции (i), текущий эл-т (j-й) сравнивается с предыдущим (j-1)
  10. counter++; //если предыдущий больше текущего, наращивается счетчик перестановок (это не обязательная величина. да и сам шаг тоже не важен принципиально)
  11.    int tmp=arr[j-1]; //типичный
  12.    arr[j-1]=arr[j]; //обмен
  13.    arr[j]=tmp; //двух величин
  14.    cout<<arr[j]<<" ";                      
  15.  }
  16.   cout<<counter<<"-th iteration"<<endl; //выводится номер операции обмена. понятно, что, если на протяжении 2-х или 3-х шагов э-л ты стоят по-порядку, будет выводится одно и то же значение
  17. }
  18.   cout<<counter<<"iterations total"<<endl; //сообщение об общем количестве обменов
  19. }
  20. int main()
  21. {
  22.    int A[board]; //массив, размерность задана глобальной константой
  23.    int i;
  24.    for (i = 0; i < board; i++) {
  25.        A[i] = rand()% 10;
  26.        cout << A[i]<< " "; //выводится несортированный массив
  27.    }
  28.    cout<<endl;
  29.    Sort (A, board); //вызов ф-ии сортировки
  30.    for (i = 0; i < board; i++)
  31.        cout << A[i]<< " "; //сортированный массив
  32. return 0;
  33. }


Помогите, пожалуйста Растерялся
2. dcc0 - 02 Февраля, 2021 - 13:32:20 - перейти к сообщению
Наверное же, требуется сделать сортировку не встроенными функциями.

Первое от поисковика:
http://php-zametki[dot]ru/php-nachin[dot][dot][dot]-sortirovka[dot]html

Второй алгоритм сверху рабочий.

И вроде бы почти точно соответствуют псевдокоду из Википедии:
https://ru[dot]wikipedia[dot]org/wiki/Со[dot][dot][dot]ировка_вставками


А в коде выше неясности: sort - это встроенная функция, как я понял. И зачем-то деление по модулю с генерацией псевдослучайного числа.


Если нужно наглядно:
Спойлер (Отобразить)
3. Vladimir Kheifets - 02 Февраля, 2021 - 18:59:42 - перейти к сообщению
dcc0 пишет:
А в коде выше неясности: sort - это встроенная функция, как я понял. И зачем-то деление по модулю с генерацией псевдослучайного числа.

Добрый день!
в коде на языке С, Sort не встроенная функция, а самописная и её попросили перевести на PHP,
а деление по модулю с генерацией псевдослучайного числа для того чтобы получить исхоный массив А для тестирования этой функции.
(Добавление)
Aleri пишет:
Здравствуйте, у меня возникла проблема, не могу реализовать данное задание на php:
Перевел исхоный код с языка С на PHP
Спойлер (Отобразить)
Удачи!
4. dcc0 - 02 Февраля, 2021 - 21:01:27 - перейти к сообщению
Vladimir Kheifets, I am sorry,
в С код не стал вникать. Особенно в верхнюю часть.


Aleri,
странно, что не получилось реализовать. Может, не разобрались с возвратом по ссылке?!

В коде Vladimir Kheifets есть
5. Aleri - 02 Февраля, 2021 - 21:21:48 - перейти к сообщению
dcc0, спасибо, вам за наводку Улыбка
6. dcc0 - 02 Февраля, 2021 - 21:24:24 - перейти к сообщению
Aleri, не за что.
Надеюсь, вы не пропустили за моими комментариями полный код
от Vladimir Kheifets под спойлером?! См. выше.
7. Aleri - 02 Февраля, 2021 - 21:24:55 - перейти к сообщению
Vladimir Kheifets, о боги, спасибо огромное, очень-очень помогли мне Прыгаю до потолка
8. dcc0 - 02 Февраля, 2021 - 21:52:45 - перейти к сообщению
Aleri,
вам тоже спасибо. Я не знал про сортировку вставками. (юбилейное - 1000-щное сообщение Радость )
9. Aleri - 03 Февраля, 2021 - 03:39:53 - перейти к сообщению
dcc0 пишет:
Aleri,
вам тоже спасибо. Я не знал про сортировку вставками. (юбилейное - 1000-щное сообщение Радость )


Я очень рада, что тоже оказалась вам чем-то полезна Хи

 

Powered by ExBB FM 1.0 RC1