Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сортировка методом пузырька




Begin

Begin

Begin

Begin

Begin

Var

Сортировка вставками

Type

Type

TMouseButton = (mbLeft, mbRight, mbMiddle);

По именам возможных значений параметра понятно, какая из кнопок мыши нажата.

 

Shift: параметр, имеющий тип–множество, объявленный в модуле Classes:

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

 

Тип TShiftState используется обработчиками событий мыши и клавиатуры для выяснения состояния клавиш Alt, Ctrl, Shift клавиатуры и кнопок мыши в момент происхождения события.

 

Составляющие множество «флаги» имеют следующий смысл:

ssShift – клавиша Shift нажата.

ssAlt – клавиша Alt нажата.

ssCtrl – клавиша Ctrl нажата.

ssLeft – левая кнопка мыши нажата.

ssRight – правая кнопка мыши нажата.

ssMiddle – средняя кнопка мыши нажата.

ssDouble – мышь получила двойной щелчок.

 

x, y: координаты указателя мыши (в пикселях) относительно верхнего левого угла элемента, с которым произошло событие (в данном случае, ImageGraph).


Событие «перемещается указатель мыши» (MouseMove).

 

procedure TForm1.ImageGraphMouseMove(Sender: TObject;

Shift: TShiftState; x, y: Integer);

Параметры в дополнительных пояснениях не нуждаются.

 

 

Событие «отпущена кнопка мыши» (MouseUp).

 

procedure TForm1.ImageGraphMouseUp(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; x, y: Integer);

Параметры в дополнительных пояснениях не нуждаются.

 

Ссылки на модули Controls и Classes должны присутствовать в предложении uses.


Проект “Graph”, в котором использован алгоритм Дейкстры, представлен файлом Graph.doc, который надо переименовать в Graph.RAR и распаковать.

 

 

 

Алгоритм, в нескольких словах, таков.

На «первом» шаге вообще ничего не делается.

На втором шаге берётся второй элемент (A 2) и сравнивается с первым (A 1). Если второй элемент меньше первого, они обмениваются местами. Результат – два элемента упорядочены.

На i -ом шаге (теперь i = 3, 4, 5, …, n) берётся i -ый элемент (Ai) и сравнивается с теми элементами Aj, что расположены слева от него: j = i - 1, j = i - 2, j = i - 3, и т.д. – так до тех пор, пока выполняется неравенство Ai < Aj. В последний раз, когда это неравенство будет выполнено, переменная j примет значение, равное новому месту для Ai – такому, куда нужно Ai вставить.

Например, пусть i = 5, а первые 5 элементов массива таковы: 4, 3, 9, 11, 5. В последний раз Ai < Aj при j = 3. Следовательно, число 5 должно встать на третью позицию, подвинув числа 9, 11 вправо на 1 шаг. Результат – i элементов упорядочены.

 


Текст процедуры:

 

procedure InsertSort;

i, j: int64;

x: single;

nMove:=0;

nCompare:=0;

 

for i:= 2 to nCurr do

x:= A[i];

Inc(nMove);

 

j:= i;

while (j > 1) and (x < A[j - 1]) do

// Попаданий в тело цикла будет на 1 меньше,

// чем вычислений логического условия « (j > 1) and (x < A[j - 1])».

Inc(nCompare);

A[j]:= A[j - 1];

Inc(nMove, 2);

Dec(j);

end;

 

if j > 1 then

// Сюда попали => при последнем j проверка «(x < A[j - 1])» была

Inc(nMove);

// Прверка условия «(x < A[j - 1])» требует одного перемещения

Inc(nCompare);

end;

 

if j <> i then

A[j]:= x;

Inc(nMove);

end;

end;

end;

Назначение переменных:

nCurr – текущее количество элементов в массиве,

nMove – найденное количество перемещений.

nCompare – найденное количество сравнений.


Количество сравнений (nCompare):

 

 

i Min Max Average
       
      3/2
       
i   i -1 i /2
n   n -1  
n -1 n 2/2- n /2 n 2/4+ n /4-1/2

 

 


Количество переносов (nMove):

 

 

i Min Max Average
       
       
       
i   2 i i +1
n   2 n n +1
2(n -1) n 2+ n -2 n 2/2-3 n /2-2

 

 

 

На первом шаге проверяются все пары соседних элементов массива, начиная с последней. Если пара «неправильная» (левый элемент больше правого), производится обмен значениями в паре. Наименьший из всех элементов массива, если только он не стоял на первом месте, «просочится» в результате первого шага на первую позицию, поскольку он будет «неправильно» расположен относительно каждого из своих соседей слева.

На втором шаге свое законное место (второе слева) занимает наименьший из оставшихся элементов массива. И т.д.


Текст процедуры:

procedure BubbleSort;




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 330; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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