powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сортировка Foreach PHP
20 сообщений из 20, страница 1 из 1
Сортировка Foreach PHP
    #38934061
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, форумчане
помогите нубу идеей, или алгоритмом, или идеей сортировки массива циклом Foreach(пор условию задания из циклов возможно применять только Foreach).
ибо столько времени убил, а придумать не могу
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934081
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freeman,

Пузырек. Внешний цикл делается по копии массива
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934103
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
боюсь навлечь на себя негодование, но все же:
думал сделать по копии, через array_reverse, только вот натыкаюсь на одну и ту же проблему:

к примеру есть массив 1 3 2

если осуществлять перебор по условию что на внутреннем цикле значение меньше чем на внешнем, в итоге получим массив 1 2 2
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934136
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freemanперебор по условию что на внутреннем цикле значение меньше чем на внешнем,Ась? Вы сейчас о чем? Я же написал - сортировка пузырьком. Ищется максимальное значение и тащится вправо
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934143
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот Вам реализация в первом приближении
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function sort(array $AData) {
  $res = array();
  $temp = $AData;
  $globalMin = null;
  foreach($temp as $t) {
    $min = $globalMin;
    foreach($AData as $val) {
      if ((!isset($globalMin) || ($val > $globalMin)) && (!isset($min) || ($val < $min)))
        $min = $val;
    }
    if (!isset($min))
      break;
    foreach($AData as $val) {
      if ($val == $min)
        $res[] = $val;
    }
    $globalMin = $min;
  }
  return $res;
}
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934184
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да уж, космос
спасибо
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934231
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freeman,

а встроенные функции не подойдут?
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934296
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, это типа как учебное задание
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934306
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
спс, Ваш код не работает, но идея с записью минимального числа в отделную переменную с последующей ее перезаписью просто космос
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
$mass=range(1,10,1);
shuffle($mass);
$new = $mass;

$amin=null;

foreach($mass as $v){
        $min=time();

    foreach($new as $v1){
        if($v1<$min && $v1 > $amin){
            $min=$v1;
        }
    }
    $res[]=$min;
    $amin=$min;


}

print_r($res);
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934309
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
копию массива тоже делать не зачем
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934369
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freeman,
$test_array = array(10, 10, 2, 2, 25, 25)
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934455
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freemanВаш код не работает,В каком месте?
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934498
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант попроще и быстрее
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$array = [1,67,3,12,45,2];
$count = sizeof($array);
do {
  $f=false;
  $i=0;
  foreach($array as $k=>$v) {
    if ($i==$count-1) break;
    if ($array[$i]>$array[$i+1]) {
      list($array[$i], $array[$i+1]) = [$array[$i+1], $array[$i]];
      $f=true;
    }
    ++$i;
  }//for
} while($f);
//
echo '<pre>';
print_r($array); 
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934527
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uвариант попрощеr u
Код: php
1.
while($f);

l-freemanпор условию задания из циклов возможно применять только Foreach
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934643
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-freemanпор условию задания из циклов возможно применять только Foreach
тогда еще проще
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$a = [1,67,3,12,45,2];
//
$cnt = sizeof($a)-1;
foreach($a as $k=>$v) {
  $end=true;
  foreach($a as $kk=>$vv) {
    if ($kk==$cnt) break;
    if ($a[$kk]>$a[$kk+1]) {
      list($a[$kk],$a[$kk+1]) = [$a[$kk+1],$a[$kk]];
      $end = false;
    }
  }//foreach
  if ($end) break;
}//foreach
//
echo '<pre>';print_r($a); 
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38934651
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_l-freemanВаш код не работает,В каком месте?
весь. выдает массив единичек)
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38935352
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменить_Vasilisk_
Код: php
1.
$min = $globalMin;

на
Код: php
1.
$min = null;
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38935393
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r ul-freemanпор условию задания из циклов возможно применять только Foreach
тогда еще проще
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$a = [1,67,3,12,45,2];
//
$cnt = sizeof($a)-1;
foreach($a as $k=>$v) {
  $end=true;
  foreach($a as $kk=>$vv) {
    if ($kk==$cnt) break;
    if ($a[$kk]>$a[$kk+1]) {
      list($a[$kk],$a[$kk+1]) = [$a[$kk+1],$a[$kk]];
      $end = false;
    }
  }//foreach
  if ($end) break;
}//foreach
//
echo '<pre>';print_r($a); 



ну что ж вы так...пан профессор , забыли $cnt-- после строчки if ($end) break;
ну зачем же бежать до конча цикла во внутренем фориче, если известно, что после 10 внешних итераций, последние 10 елементов в масиве уже гарантированно на своих местах!
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38935444
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

спс. но это уже оптимизации, коих додумать можно много. задачи такой перед собой и не ставил. главное суть алгоритма, который пытается написать ТС.
...
Рейтинг: 0 / 0
Сортировка Foreach PHP
    #38936491
l-freeman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab,
да, есть малеха, не красиво получается(
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сортировка Foreach PHP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]