Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 171; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |