Автор Тема: Сортировка  (Прочитано 6085 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« : 06 Апреля 2004, 15:55:45 »
Обрадовался когда увидел что в Перле есть встроенная функция сортировки - sort.
Делаю:
@arrnew=sort @arrold;
@arrold - одномерный массив из чисел (пример - 2 8 4 1 6 9 3 9)
Требуется отсортировать по возрастанию.
Использовать что либо типа метода выбора или пузырьком не хочется (медленно).
Хочется встроенную функцию сортировки нормально работающую.
Как правильно использовать функцию sort???

С уважением z3f.

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« Ответ #1 : 06 Апреля 2004, 16:00:09 »
Да забыл - пробовал так:
@arrnew= sort {1 cmp 100} @arrold;
Вообще бред получается!
@arrold = 2 8 3 4
отсортированный @arrnew = 4 2 8 3.

По какому принципу эта функция вообще сортирует???

С уважением z3f.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Сортировка
« Ответ #2 : 06 Апреля 2004, 16:05:45 »
[root@linux-srv mazur]# perl -de0

Loading DB routines from perl5db.pl version 1.19
Editor support available.

Enter h or `h h\' for help, or `man perldebug\' for more help.

main::(-e:1):   0
  DB<1> @m = qw(2 8 4 1 6 9 3 9)

  DB<2> print foreach @m
28416939
  DB<3> print foreach sort @m
12346899
  DB<4> @s = sort @m

  DB<5> print foreach @s
12346899
  DB<6> print foreach @m
28416939

а далее perldoc -q sort
The documentations is your friend

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« Ответ #3 : 06 Апреля 2004, 16:51:25 »
Мдям=(((
я же так все и делал вообщето....
но получается то другое совсем!!!!
потому и спросил про принцип действия функции sort!!!!
Скрипт:
my @s;
my @m;
@m = @activ;
print foreach "@m \\n";
print foreach sort "@m \\n";
@s = sort @m;
print foreach "@s \\n";
print foreach "@m \\n";

Ответ скрипта - 1 8 4 5
1 8 4 5
То есть уперто не сортирует!!!!
В чем ошибка то??? Может я както не правильно что-то чему-то присваиваю???? может действие @m=@activ в корне неправильное???

Неужели никто в скрипте не сортировал???

С уважением z3f.

ЗЫ - perldoc -q sort - внимательно прочитал - эффекта не дало=)

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Сортировка
« Ответ #4 : 06 Апреля 2004, 17:05:38 »
Цитировать
z3f:
my @s;
my @m;
@m = @activ;
print foreach "@m \\n";
print foreach sort "@m \\n";
@s = sort @m;
print foreach "@s \\n";
print foreach "@m \\n";

Разберись вначале с расстановкой кавычек... Все сортируется.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Сортировка
« Ответ #5 : 06 Апреля 2004, 17:06:59 »
@list = sort { $a <=> $b } @list;
Тоже эффекта не дало?
2B OR NOT 2B = FF

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Сортировка
« Ответ #6 : 06 Апреля 2004, 17:10:04 »
Это ты на каком языке написал?
#!/usr/bin/perl
use strict;

my @s;
print 
"Default:\\n";
my @qw(1 8 4 5);
print 
"$_\\n" foreach @m;
print 
"="x10;
print 
"\\n";
print 
"Default sorted:\\n";
print 
"$_\\n" foreach sort @m;
@
sort @m;
print 
"="x10;
print 
"\\n";
print 
"Default sorted II:\\n";
print 
"$_\\n" foreach @s;
print 
"="x10;
print 
"\\n";
print 
"Default unsorted II:\\n";
print 
"$_\\n" foreach @m;


Цитировать
z3f:
ЗЫ - perldoc -q sort - внимательно прочитал - эффекта не дало=)

Я вижу что не дало...
The documentations is your friend

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« Ответ #7 : 06 Апреля 2004, 17:36:55 »
Chs передо мной лежит учебник по перлу и если бы книжная истина пошла - я бы не обращался на форум... извини...


NeoNox
мой скрипт полностью приводить не буду - здоровый он и бестолковый ко всему прочему=)
#!/usr/bin/perl
use strict;
use CGI \':standard\';
my @s;
my @activ;
# после этого @activ забивается данными и он адназначна=) на пуст и не имеет пустых значений
@s = sort @activ;
print "Сортированный -- \\n";
print "$_ \\n" foreach @s;
print "Не сортированный -- \\n";
print "$_ \\n" foreach @activ;

По-моему я правльно воспользовался copy-paste=)
Или неправльно???
Потому что ответ - Сортированный -- 1 9 3 Не сортированный -- 1 9 3

Я просто не знаю - в чем проблема?
Посмотрите на мой скрипт еще раз пожалуйста!!!

ЗЫ - сервер FreeBSD 4.7 -- perl - вчера выкачал и поставил -- apache - месяц назад ставил... все - рабочее... может здесь проблема?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Сортировка
« Ответ #8 : 06 Апреля 2004, 18:23:23 »
Цитировать
z3f:
# после этого @activ забивается данными и он адназначна=) на пуст и не имеет пустых значений

вот это ты заказчику покажи а нам не нужно.
даже слепому станет ясно что у тебя вот здесь проблема.
ты можеш вывести элементы этого масива и посмотреть что в нем не так?

второе, ты код который я выложил постом раньше запускал? и что?
The documentations is your friend

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« Ответ #9 : 07 Апреля 2004, 14:48:49 »
NeoNox

Десйствительно - я неправильно забиваю массив. Проверил.
Проблема - действительно в моей голове.
вы правы.

Вопрос другой - корректно ли черз HTML-форму передается массив? Одно значение я могу передать, а вот целый массив передается через HTML форму в поле hidden или нет???

С уважением z3f.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Сортировка
« Ответ #10 : 07 Апреля 2004, 14:54:53 »
через форму ты передаеш значения а масивом они становятся в твоей программе.
опиши задачу подробнее
The documentations is your friend

Оффлайн z3f

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка
« Ответ #11 : 07 Апреля 2004, 17:53:25 »
Задача достаточно простая - я работу в колледже и решил написать небольшую программку для тестов... ессесно хотелось бы что бы она была что называется сервер-сайд. потому и решил что лучше всего ее сделать на перле что бы на си не возится с БД...

Есть тетсовое задание - Определить порядок действий - то етсь расставить по порядку действия. и вот делаю дружественный интерфейс. все оформляется с помощью рабиобуттонов и каждый раз отсылается на сервер. если выбираешь радиобуттон - закончить работу - вываливается новый вопрос. и так далее до последнего вопроса...

проблема была в следующем - не хотелось высвечивать радиобуттон еслиего уже выбрали. поэтому нужно было упорядочить по порядку вопросы. вот и столкнулся с проблемой.
она кстати решена - спасибо за подсказку по проверки правильности заполнения массива!

С уважением z3f.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28