Навигация
 
Главная
Для начинающих
Паскаль/Pascal
Bash

Визуальное программирование
• Visual Basic
• Delphi/Делфи
• C++/Си++/Си
• документация
• Компоненты

WEB программирование
• MySQL/мускул
• Web-дизайн
•• Шрифты
• PHP/Пхп
• Документация PHP
• JavaScript
•• библиотека jquery
•  Документация
Прочее

 
 
Поиск по сайту
 




 
 
О нас
  У нас Вы можете скачать исходники, скачать скрипты, найти исходники, исходники delphi, документация по JQeury, исходники си, учебник HTML  
 
Теги
  codeserfercom, Linux, nbspnbsp, Private, Visual, Возможность, Пример, Рассмотрим, Сегодня, Теперь, будет, данных, значение, который, может, можно, написать, например, очень, переменной, переменных, пользователя, помощью, программа, программирования, программы, просто, работы, разработки, решил, сделать, скрипт, строки, строку, также, только, функции, число, этого, языка

Показать все теги
 
 
Счетчики
 
 
 
Реклама
   
 
Лучшие коды
   
   
 
Сортировка массива в одни цикл
 Категория: Web-программирование » PHP | автор: Codeserfer | 22 июля 2009 | Просмотров: 4208  



 
Можно сколько угодно биться над повышением производительности программы и достичь лишь минимальной выгоды, если алгоритм программы изначально не способен работать быстрее. Но если изменить алгоритм, производительность может вырасти в несколько раз. Рассмотрим пример. Допустим, что вам нужно отсортировать список названий городов (назовем его Listl). Для этого можно действовать по следующему алгоритму:
1. Создать новый список List2, который будет хранить отсортированные данные.
2. Взять первый элемент списка List1 и поместить его в переменную х.
3. Сравнить переменную х с очередным элементом списка List2.
4. Если х окажется меньше, то вставить его в список List2 перед сравниваемой строкой. Если нет, то перейти к сравнению со следующим элементом списка List2.
5. Выполнять шаги 3 и 4, пока х не найдет свое место. Если список List2 закончился, то значит, х больше всех элементов и его нужно вставить в конец списка.
6. Взять следующий элемент списка List1 , поместить его в переменную х и перейти к шагу 3.
Для реализации этого алгоритма нужно два цикла, причем, один из них вложенный. Первый цикл перебирает список Listl, и для каждого элемента выполняется цикл, в котором проверяются все элементы списка List?. Помимо этого, на каждом шаге цикла происходит сравнение. Если сосчитать количество произведенных операций, то получится очень большое число. К тому же, сам алгоритм прост только на первый взгляд. На самом деле, для его реализации нужно достаточно сильно постараться и при этом не ошибиться, а здесь достаточно мест, где можно допустить ошибку. Можно как-то попытаться увеличить скорость операций сравнения, но тут у нас слишком ограничены возможности. Если у самого процессора есть несколько способов сравнить два числа, то у РНР их можно пересчитать по пальцам одной руки.
А теперь представим, что этот алгоритм должен отсортировать следующую последовательность чисел: 1, 2, 3, 4, 5, 6, 8, 7, 9. В этой последовательности достаточно поменять только числа 8 и 7 местами, но наш алгоритм этого не знает, поэтому будет выполняться очень долго. А если массив уже отсортирован? Тяжелая работа интерпретатора и процессора окажутся напрасными. Замена алгоритма на что-то более совершенное позволит ускорить работу в несколько раз. В данном случае не совсем корректно выбран пример, потому что для сортировки существует великое множество разных вариантов алгоритмов, и каждый из них при определенных условиях может работать быстрее других.
Но мы рассмотрим один из вариантов, который может реально повысить скорость работы:
1. Помещаем первый элемент в переменную х.
2. Устанавливаем флаг состояния в значение false.
3. Следующий компонент помещаем в переменную У.
4. Сравниваем переменные. Если X>Y, то меняем их в списке местами и устанавливаем флаг состояния в значение true. Иначе записываем в х значение Y.
5. Если просмотр не закончен, то перейти к шагу 2.
6. Если просмотр закончен, то проверить переменную состояния. Если она равна true, то во время проверки элементы менялись местами, и нужно повторить прогон сначала. Если состояние равно false, то повтор не нужен, все элементы отсортированы.
Возвращаемся к примеру последовательности, в которой нужно только поменять местами два элемента. При новом алгоритме нужно будет только два раза просмотреть весь список. На первом шаге цифры 7 и 8 поменяются местами, а после второго просмотра списка программа увидит, что изменений не было, а значит, список отсортирован.
Этот алгоритм нуждается только в одном цикле, который будет выполняться намного меньше раз, если данные более-менее упорядочены. Но даже при максимальном перемешивании скорость работы этого алгоритма выше, чем у рассмотренного первым. Как видите, очень важно правильно выбрать алгоритм. Если окажется, что ваш сценарий работает слишком медленно, я рекомендую уничтожить его и начать писать с чистого листа. Как я уже сказал, в РНР это очень важно, потому что нет возможности обращаться к процессору напрямую и использовать его преимущества. Разработчики РНР создавали интерпретатор максимально универсальным, поэтому и сами не очень часто оптимизировали код под конкретную архитектуру. А ведь если знать, что программа точно будет работать на Pentium 4, то можно было бы использовать новые возможности этой архитектуры, технологию Hyper Threading и новые инструкции процессора, что значительно повысит скорость работы программы даже при медленных алгоритмах. Большинство программ так или иначе использует математические алгоритмы, поэтому для написания эффективных программ вы должны хорошо разбираться в математике. Например, математические алгоритмы применяются при сортировке.
 
 

Что-то не получается? Не понятна какая-то часть кода? Напишите комментарий об этом и мы обязательно Вам все объясним!
Обязательно напишите отзыв о программе / учебнике. Для выражения благодарностей есть кнопка:


Своё Спасибо, еще не выражали.
 
  Просьбы перезалить в комментариях принимаются
 
 (голосов: 2)
 
 
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
 
  Другие коды по теме:  
 
  • Сортировка
  • Симметричное шифрование в PHP
  • Массивы
  • Работа с DNS
  • Сканер портов на PHP
  •  
    Комментарии (0) Распечатать




    © 2008 - 2010. Копирование материалов запрещено!
    Мой аккаунт
     
    Логин
    Пароль
     
     
     
    Опрос
     
    Чего нам не хватает?

    Ничего, все прекрасно и так!
    Другого дизайна
    Больше кодов
    Больше комментариев
    Посещаемости
    Дополнительных сервисов для удобства пользователей
    Другое (напишите, пожалуйста, что)
     
     
    Друзья
     
    serial, crack, keygen
    cool-archive.ru
    ABC-IT.lv - истиному ИТишнику!
     
     
    Архив кодов
      Август 2011 (1)
    Июль 2011 (4)
    Июнь 2011 (3)
    Апрель 2011 (2)
    Февраль 2011 (5)
    Январь 2011 (3)
     
     
     
    Реклама