русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

СОРТИРОВКА СПИСКОВ МЕТОДОМ ВСТАВКИ


Дата добавления: 2014-09-29; просмотров: 2434; Нарушение авторских прав


Сортировка представляет собой переупорядочивание элементов списка определенным образом. Гораздо проще и гораздо эффективнее искать что-либо в отсортированном списке, нежели в неотсортированном.

Существует много способов сортировки списков. Сортирующее правило Турбо-Пролога принимает на вход неотсортированный список, и выдает отсортированный на выходе. Входной список называется ИСХОДНЫМ, выходной — ЦЕЛЕВЫМ.

Метод вставки особенно удобен для реализации его на Турбо-Прологе.

Идея этой сортировки следующая:

1. Извлекаем из списка голову H.

2. Методом вставки сортируем хвост.

3. Вносим H в подходящее место отсортированного хвоста.

Опишем предикат, производящий сортировку списка методом вставки

insert_sort(Source_list,Target_list)

Внешней целью в задаче сортировки списка [4,7,3,9] будет утверждение

insert_sort([4,7,3,9],S)

В этом утверждении отсортированный список обозначен переменной S. Правила, реализующие этот способ сортировки, имеют следующую структуру:

insert_sort([],[]).

insert_sort([H|T],Sorted_list) :-

insert_sort(T,Sorted_Tail),

insert(H,Sorted_Tail,Sorted_list).

insert(X,[H|Sorted_list],[H|Sorted_list1]) :-

X > H,!,

insert(X,Sorted_list,Sorted_list1).

insert(X,Sorted_list,[X|Sorted_list]).

Дальнейшее обсуждение продемонстрирует работу правил на примере списка [4,7,3,9].

Вначале Турбо-Пролог применяет приведенные правила к исходному списку, выходной список в этот момент еше не определен.

insert_sort([4,7,3,9],_)

Первая попытка удовлетворить правило insert_sort осуществляется с первым вариантом правила

insert_sort([],[])

Для удовлетворения правила оба списка должны быть пустыми.

Согласно второму варианту правила внутренние унификационные процедуры Турбо-Пролога пытаются сделать пустым исходный список. Рекурсия убирает элементы исходного списка, начиная с головы, и переносит их в стек. В результате применения этой процедуры список становится нулевым. Теперь первый вариант правила insert_sort производит обнуление выходного списка.



Далее, первое взятое из стека значение (9), вносится во второй список:

insert(9,[],[9])

Из стека извлекается следующий элемент (3), и при помощи второго варианта insert вставляется в выходной список слева от 9:

insert(3,[9],[3,9])

Происходит возврат к insert_sort, теперь оно имеет форму

insert_sort([3,9],[3,9])

Таким образом, все элементы извлекаются из стека и помещаются в выходной список.

/* Программа 7.2. Назначение: */

/* демонстрация сортировки списка */

/* в порядке возрастания методом вставки */

domains

list = integer *

 

predicates

 

insert_sort(list,list)

insert(integer,list,list)

 

clauses

 

insert_sort([],[]).

insert_sort([H|T,Sorted_list) :-

insert_sort(T,Sorted_Tail),

insert(H,Sorted_Tail,Sorted_list).

insert(X,[H|Sorted_list],[H|Sorted_list1]) :-

X > H, !,

insert(X,Sorted_list,Sorted_list1).

insert(X,Sorted_list,[X|Sorted_list]).

/* Конец программы */



<== предыдущая лекция | следующая лекция ==>
РАЗДЕЛЕНИЕ СПИСКА НА ДВА | БЫСТРАЯ СОРТИРОВКА


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.167 сек.