Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лістинг програми з коментарями
unit unitSort3D;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,,StdCtrls,UnitDop,sort3DArrayDop;D = class(TForm): TLabel;: TLabel;: TMemo;: TEdit;: TButton;: TMemo;: TEdit;: TEdit;: TButton;: TButton;: TButton;: TGroupBox;: TLabel;: TLabel;: TLabel;: TGroupBox;: TLabel;: TLabel;: TLabel;FormCreate(Sender: TObject);btnCreateTestArraysClick(Sender: TObject);btnLaunchSortClick(Sender: TObject);btnCompareSortingbyOperationsClick(Sender: TObject);btnCalculateForAlternateSizeClick(Sender: TObject); { Private declarations } { Public declarations };D: TfrmSort3D;,ad1,ad2,ad3:TArrayDyn; {$R *.dfm}TfrmSort3D.FormCreate(Sender: TObject);.Text:='100';.Text:='100';.Text:='100';;TfrmSort3D.btnCreateTestArraysClick(Sender: TObject);,j,k,sizeN,sizeM,sizeP: integer; //Очистити поле результатів.clear;.clear;:=StrToInt(edtSizeN.Text);:=StrToInt(edtSizeM.Text);:=StrToInt(edtSizeP.Text);(ad,sizeN,sizeM,sizeP);(ad1,sizeN,sizeM,sizeP);;i:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=Random(100);[i,j,k]:= ad[i,j,k];;.Lines.Append('Масив ' +InttoStr(SizeN)+'x' +InttoStr(SizeM)+'x' +InttoStr(SizeP)+ ' створено');(sizeN<5) and (sizeM<5) and (sizeP<5) then(ad,sizeN,sizeM,sizeP,memSortDetails);(ad1,sizeN,sizeM,sizeP,memSortDetails);;;TfrmSort3D.btnLaunchSortClick(Sender: TObject);sizeN,sizeM,sizeP: integer; //Зчитати розмір масиву:=StrToInt(edtSizeN.Text);:=StrToInt(edtSizeM.Text);:=StrToInt(edtSizeP.Text); //запускаємо процедуру сортування та виведення масиву(ad,ad1,sizeN,sizeM,sizeP,memSortResults,memSortDetails);TfrmSort3D.btnCompareSortingbyOperationsClick(Sender: TObject);i,j,k,sizeN,sizeM,sizeP: integer;,pCountSelection,pCountShaker:int64; //Зчитати розмір масиву:=StrToInt(edtSizeN.Text);:=StrToInt(edtSizeM.Text);:=StrToInt(edtSizeP.Text); //вивести заголовок результатів.Lines.Append(
Порівняння методів сортувань за кількістю переміщень'
+InttoStr(sizeN) + 'x'+InttoStr(sizeM)+'x'+InttoStr(sizeP));.Lines.Append('Вставка |Обмін| Шейкер');:=0;:=0;:=0; //зчитати масив ad1 з adi:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=ad[i,j,k]; {============== Процеси сортування} //Сортувати невпорядкований масив вставкою із підрахунком кількості переміщень(ad1,pCountByInsertion,sizeN,sizeM,sizeP); //зчитати масив ad1 з adi:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=ad[i,j,k]; //Сортувати невпорядкований масив вибором із підрахунком кількості переміщень(ad1,pCountSelection,sizeN,sizeM,sizeP); //зчитати масив ad1 з adi:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=ad[i,j,k]; //Сортувати невпорядкований масив шейкером із підрахунком кількості переміщень(ad1,pCountShaker,sizeN,sizeM,sizeP);.Lines.Append('----Переміщень для випадкового масиву-------');.Lines.Append(format(' %1.4d %1.4d %1.4d ', [pCountByInsertion,pCountSelection,pCountShaker]));:=0;:=0;:=0; //Сортувати впорядкований масив вставкою із підрахунком кількості переміщень(ad1,pCountByInsertion,sizeN,sizeM,sizeP); //Сортувати впорядкований масив вибором із підрахунком кількості переміщень(ad1,pCountSelection,sizeN,sizeM,sizeP); //Сортувати впорядкований масив шейкером із підрахунком кількості переміщень(ad1,pCountShaker,sizeN,sizeM,sizeP);.Lines.Append('----Переміщень для відсортованого масиву-------');.Lines.Append(format(' %1.4d %1.4d %1.4d ',
[pCountByInsertion,pCountSelection,pCountShaker]));:=0;:=0;:=0; //Сортувати зворотно впорядкований масив вставкою із підрахунком кількості переміщень(ad1,sizeN,sizeM,sizeP);(ad1,pCountByInsertion,sizeN,sizeM,sizeP); //Сортувати зворотно впорядкований масив вибором із підрахунком кількості переміщень(ad1,sizeN,sizeM,sizeP);(ad1,pCountSelection,sizeN,sizeM,sizeP); //Сортувати зворотно впорядкований масив шейкером із підрахунком кількості переміщень(ad1,sizeN,sizeM,sizeP);(ad1,pCountShaker,sizeN,sizeM,sizeP);.Lines.Append('--Переміщень для зворотно відсортованого масиву----');.Lines.Append(format(' %1.4d %1.4d %1.4d ', [pCountByInsertion,pCountSelection,pCountShaker]));;TfrmSort3D.btnCalculateForAlternateSizeClick(Sender: TObject);sizeN,sizeM,sizeP,,sizeMad2,sizePad2,,j,k,j_ad2,k_ad2:integer; //зчитати розмір масиву:=StrToInt(edtSizeN.Text);:=StrToInt(edtSizeM.Text);:=StrToInt(edtSizeP.Text); //задати довжину для масивів:=sizeN;:=sizeM div 2;:=sizeP*2;(ad2,sizeNad2,sizeMad2,sizePad2);(ad3,sizeNad2,sizeMad2,sizePad2); //зчитати массив з ad в ad2 и ad3 з урахуванням зміни геометричних розмірів перерізуi:=0 to sizeN-1 do_ad2:=0;j:=0 to sizeM-1 doj mod 2 = 0k_ad2:=0k_ad2:=sizeP;k:=0 to sizeP-1 do[i,j_ad2,k_ad2]:=ad[i,j,k];[i,j_ad2,k_ad2]:=ad[i,j,k];_ad2:=k_ad2+1;;j mod 2 = 1j_ad2:=j_ad2+1;;;.Lines.Append('Масив набув нових геометричних розмірів:'+(sizeNad2)+ 'x'+ IntToStr(sizeMad2)+'x' +IntToStr(sizePad2)); //Якщо масив невеликий, відображаємо його(sizeNad2<11) and (sizeMad2 <11) and (sizePad2<11) then.Lines.Append('Новий масив:'+ IntToStr(sizeNad2)+ 'x'+(sizeMad2)+'x' +IntToStr(sizePad2));(ad2,sizeNad2,sizeMad2,sizePad2,memSortDetails);; //запускаємо процедуру сортування та виведення масиву(ad2,ad3,sizeNad2,sizeMad2,sizePad2,memSortResults,memSortDetails); //задать длину для массивов:=sizeN;:=sizeM*2;:=sizeP div 2;(ad2,sizeNad2,sizeMad2,sizePad2);(ad3,sizeNad2,sizeMad2,sizePad2); //зчитати массив з ad в ad2 и ad3 з урахуванням зміни геометричних розмірів перерізуi:=0 to sizeN-1 do_ad2:=0;j:=0 to sizeM-1 do_ad2:=0;k:=0 to sizeP-1 do[i,j_ad2,k_ad2]:=ad[i,j,k];[i,j_ad2,k_ad2]:=ad[i,j,k]; //if row ended atart from next rowk=sizePad2-1j_ad2:=j_ad2+1;_ad2:=0;_ad2:=k_ad2+1;;_ad2:=j_ad2+1;;.Lines.Append('Масив набув нових геометричних розмірів:'+(sizeNad2)+ 'x'+ IntToStr(sizeMad2)+'x' +IntToStr(sizePad2)); //Якщо масив невеликий, відображаємо його(sizeNad2<50) and (sizeMad2 <50) and (sizePad2<50) then.Lines.Append('Новый массив:'+ IntToStr(sizeNad2)+ 'x'+(sizeMad2)+'x' +IntToStr(sizePad2));(ad2,sizeNad2,sizeMad2,sizePad2,memSortDetails);; //запускаємо процедуру сортування та виведення масиву(ad2,ad3,sizeNad2,sizeMad2,sizePad2,memSortResults,memSortDetails);.
Допоміжний модуль: sort3DArrayDop;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;D = Array[0..1000000] of integer;= Array of Array of Array of integer;showArrayDyninMemo(a: TArrayDyn;sizeN,sizeM,sizeP: integer;m: Tmemo);sortArrayAndShowResultsInMemo(a,a1: TArrayDyn;sizeN,sizeM,sizeP: integer;memSortResults,memSortDetails: Tmemo);sortDynByInsertion(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynByInsertionReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynSelection(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynSelectionReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynShaker(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynShakerReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);sortDynByInsertionCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);sortDynSelectionCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);sortDynShakerCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);showArrayDyninMemo(a: TArrayDyn;sizeN,sizeM,sizeP: integer;m: Tmemo);i,j,k: integer;: string;i:=0 to sizeN-1 do.lines.append(IntToStr(i));j:=0 to sizeM-1 do:=inttostr(a[i,j,0]);k:=1 to sizeP-1 do:=str+' ' + IntToStr(a[i,j,k]);.lines.append(str);;;;sortArrayAndShowResultsInMemo(a,a1: TArrayDyn;sizeN,sizeM,sizeP: integer;memSortResults,memSortDetails: Tmemo);i,j,k,t1,t2,t,tSumInsertRandom,tSumInsertSorted,tSumInsertSortedReverse,,tSumSelectionSorted,tSumSelectionSortedReverse,,tSumShakerSorted,tSumShakerSortedReverse:integer;
{=============================================== Заголовок результатів}.Lines.Append('Результати сортування массиву' +InttoStr(sizeN) + 'x'+InttoStr(sizeM)+'x'+InttoStr(sizeP));.Lines.Append('Невпорядкований|Впорядкований|Зворотно впорядкований');:=0;:=0;:=0;:=0;:=0;:=0;:=0;:=0;:=0; //зчитати масив a1 з ai:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=a[i,j,k];(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний невпорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {=========================== Сортувати випадковий масив вибором}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumSelectionRandom+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Відсортований неупорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {==================== сортувати впорядкований масив вибором}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumSelectionSorted+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований впорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {================= Сортувати зворотно впрорядкований масив вибором}(a1,sizeN,sizeM,sizeP);(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний зворотно впорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');;:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumSelectionSortedReverse+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований зворотно впорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; //зчитуємо масив ad1 з adi:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=a[i,j,k];(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний невпорядкований масив для сортування шейкером');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {================ сортувати невпорядкований масив шейкером}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumShakerRandom+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований неупорядовкований масив для сортування шейкером');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {=============== сортувати впорядкований масив шейкером}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumShakerSorted+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований впорядкований масив для сортування шейкером');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {============== сортувати зворотно впорядкований масив шейкером}(a1,sizeN,sizeM,sizeP);(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний зворотно впорядкований масив для сортування шейкером');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');;:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumShakerSortedReverse+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований зворотно впорядкований масив для сортування вибором');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; //зчитати масив ad1 з adi:=0 to sizeN-1 doj:=0 to sizeM-1 dok:=0 to sizeP-1 do[i,j,k]:=a[i,j,k];(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний невпорядкований масив для сортування вставкою');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');;
{============= сортувати невпорядкований масив вставкою}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumInsertRandom+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Відсортований невпорядкований масив для сортування вставкою');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {=========== сортувати впорядкований масив вставкою}:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumInsertSorted+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Відсортований упорядкований масив для сортування вставкою');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');; {============= сортувати зворотно впорядкований масив вставкою}(a1,sizeN,sizeM,sizeP);(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Вихідний зворотно впорядкований масив для сортування вставкою');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');;:=GetTickCount;(a1,sizeN,sizeM,sizeP);:=GetTickCount;:=t2-t1;:=tSumInsertSortedReverse+t;(sizeN<=10) and (sizeM<=10) and (sizeP<=10)begin.Lines.append('Впорядкований зворотно впорядкований масив для сортування вставкою');(a1,sizeN,sizeM,sizeP,memSortDetails);.Lines.append('');;.Lines.Append('----дані по сортуванню вставкою-------');.Lines.Append(format(' %1.4d %1.4d %1.4d ', [tSumInsertRandom,tSumInsertSorted,tSumInsertSortedReverse]));.Lines.Append('----дані по сортуванню вибором-------');.Lines.Append(format(' %1.4d %1.4d %1.4d ', [tSumSelectionRandom, tSumSelectionSorted, tSumSelection Sorted Reverse]));.Lines.Append('----дані по сортуванню шейкром-------');.Lines.Append(format(' %1.4d %1.4d %1.4d ', [tSumShakerRandom,tSumShakerSorted,tSumShakerSortedReverse]));; {===== сортування вставкою перерезів за НЕспаданням сум їх елементів}sortDynByInsertion(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,b,c,l:integer; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; //пошук місця вставкиi:=1 to sizeN-1 do:=0;:=a1[i];a1[c]<b do:=c+1;;a1[c]=a1[i] then continuebegin //зсув елементів одновимірного масивуl:=i downto c+1 do[l]:=a1[l-1];; //вставка на місце, що звільнилося[c]:=b; //зсув елементів тривімирного масиву і вставка на місце, що звільнилосяj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];l:=i downto c+1 do[l,j,k]:=ad[l-1,j,k];;[c,j,k]:=b;;;;; {============ сортування вставкою перерізів за НЕзростанням суми їх елементів}sortDynByInsertionReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,b,c,l:integer; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; //пошук місця вставкиi:=1 to sizeN-1 do:=0;:=a1[i];a1[c]>b do:=c+1;;a1[c]=a1[i] then continuebegin //зсув елементів одновимірного масивуl:=i downto c+1 do[l]:=a1[l-1];; //вставка на місце, що звільнилося[c]:=b; //зсув елементів тривімирного масиву і вставка на місце, що звільнилосяj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];l:=i downto c+1 do[l,j,k]:=ad[l-1,j,k];;[c,j,k]:=b;;;;;; {================= Сортування вибором із запам'ятовуванням місця останньої перестановки перерізів за НЕспаданням суми їх елементів}sortDynSelection(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1:TArray1D;,j,k,sum,x,y,l:integer;
//створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; // процедура сортування методом виборуl:=i+1 to sizeN doa1[l]>a1[i] then //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[l];[l]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y; {============== Сортування вибором із запам'ятовуванням місця останньої перестановки перерізів за НЕзростанням суми їх елементів}sortDynSelectionReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1:TArray1D;,j,k,sum,x,y,l,R:integer; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; // процедура сортування методом виборуl:=i+1 to sizeN doa1[l]<a1[i] then //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[l];[l]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;; {======= Сортування шейкером перерізів за НЕзростанням суми їх елементів}sortDynShaker(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,x,y,L,R,b:integer; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; //зовнішній цикл - поки границі відсортований частин не зійдуться //L - ліва границя невідсортованої частини //R - права границя невідсортованої частини:=0; L:=0;R:=sizeN-1;L<R do begini:=L to R-1 doa1[i]>a1[i+1] then //якщо порядок розташування сусідніх елементів порушено //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[i+1];[i+1]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;;:=i;;:=b;; //Зворотний прохідi:=R-1 downto L doa1[i]>a1[i+1] then //якщо порядок розташування сусідніх елементів порушено //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[i+1];[i+1]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;;:=i;;:=b+1;;;; {======== Сортування шейкером перерізів за НЕспаданням суми їх елементів}sortDynShakerReverse(var ad:TArrayDyn; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,x,y,L,R,b:integer; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;; //зовнішній цикл - поки границі відсортований частин не зійдуться //L - ліва границя невідсортованої частини //R - права границя невідсортованої частини:=0; L:=0;R:=sizeN-1;L<R do begini:=L to R-1 doa1[i]<a1[i+1] then //якщо порядок розташування сусідніх елементів порушено //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[i+1];[i+1]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;;:=i;;:=b;; //Зворотний прохідi:=R-1 downto L doa1[i]<a1[i+1] then //якщо порядок розташування сусідніх елементів порушено //міняємо місцями елементи одновимірного масиву:=a1[i];[i]:=a1[i+1];[i+1]:=x; //міняємо місцями перерізи тривимірного масивуj:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;;:=i;;:=b+1;;; {==========
сортування для глобального масиву із підрахунком кількості операцій Сортує масив методом вибору так, як задано за варіантом із підрахунком кількості переміщень елементів}
sortDynByInsertionCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,b,c,l:integer;:=0; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;;i:=1 to sizeN-1 do:=0;:=a1[i];a1[c]<b do:=c+1;;a1[c]=a1[i] then continuebeginl:=i downto c+1 do[l]:=a1[l-1];;[c]:=b;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];:=pCount+1; //прирощуємо кількість переміщеньl:=i downto c+1 do[l,j,k]:=ad[l-1,j,k];:=pCount+1; //прирощуємо кількість переміщень;[c,j,k]:=b;:=pCount+1; //прирощуємо кількість переміщень;; {======= Сортує масив методом вибору так, як задано за варіантом із підрахунком кількості переміщень елементів}sortDynSelectionCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);a1:TArray1D;,j,k,sum,x,y,l,R:integer;:=0; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;;:=sizeN-1;R>0 do begin:=0;i:=0 to R-1 doa1[i]>a1[i+1] then:=a1[i];[i]:=a1[i+1];[i+1]:=x;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;:=pCount+3 //прирощуємо кількість переміщень;:=i+1;;;:=l;;;; {===== Сортує масив шейкерним методом так, як задано за варіантом із підрахунком кількості переміщень елементів}sortDynShakerCount(var ad:TArrayDyn; var pCount:int64; sizeN,sizeM,sizeP: integer);a1: TArray1D;,j,k,sum,x,y,L,R,b:integer;:=0; //створення одновимірного масиву із сум елементів кожного перерізуi:=0 to sizeN-1 do:=0;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=sum+ad[i,j,k];;;[i]:=sum;;:=0; L:=0;R:=sizeN-1;L<R do begini:=L to R-1 doa1[i]>a1[i+1] then:=a1[i];[i]:=a1[i+1];[i+1]:=x;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;:=pCount+3; //прирощуємо кількість переміщень;:=i;;:=b;;i:=R-1 downto L doa1[i]>a1[i+1] then:=a1[i];[i]:=a1[i+1];[i+1]:=x;j:=0 to sizeM-1 dok:=0 to sizeP-1 do:=ad[i,j,k];[i,j,k]:=ad[i+1,j,k];[i+1,j,k]:=y;:=pCount+3; //прирощуємо кількість переміщень;:=i;;:=b+1;;;;. Час сортування
Час наведено у «тіках» процесору, він є відносним.
Масив 100х100х100 Табл. 4. 1 - Час сортування для масиву 100х100х100
Масив 100х500х500 Табл. 4.2 - Час сортування для масиву 100х500х500
|
|||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-02-07; просмотров: 78; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.40.53 (0.047 с.) |