Quick sort - Free Pascal
Формулировка задачи:
!Хелпаните с сортировкой выдает ошибку !
USES Windows; {---------------------------------------------------------} CONST MaxNumber = 700000; Size = 128000; {---------------------------------------------------------} VAR start,finish,res:int64; i,j,t:longint; BaseArray:array[1..size] of longint; Procedure Exchange(a,b:longint); VAR tmp:longint; Begin tmp:=BaseArray[a]; BaseArray[a]:=BaseArray[b]; BaseArray[b]:=tmp; end; BEGIN Randomize; Repeat Writeln('1:Упорядочные'); Writeln('2:Обратный порядок'); Writeln('3:Вырожденные'); Writeln('4:Случайные'); readln(t); Until (t=1) or (t=2) or (t=3) or (t=4); randomize; Case t of 1: begin BaseArray[1] := MaxNumber; for i := 2 to Size do BaseArray[i] := BaseArray[i-1]-random(MaxNumber div Size)-1 end; 2: begin BaseArray[1] := 1; for i := 2 to Size do BaseArray[i] := BaseArray[i-1]+random(MaxNumber div Size)+1 end; 3: begin for i := 1 to Size do BaseArray[i] := random(12)+1; end; 4: begin for i := 1 to Size do BaseArray[i] := random(MaxNumber)+1 end; End; QueryPerformanceFrequency(res); QueryPerformanceCounter(start); {Сортировка} Procedure QuickSort(LBound, UBound:Longint); begin i := LBound; j := UBound; repeat while i <> j do if BaseArray[i] >= BaseArray[j] then dec(j); else begin Exchange(i, j); break end; while i <> j do if BaseArray[i] >= BaseArray[j] then inc(i); else begin Exchange(i, j); break end; until i = j; if i - 1 > LBound then QuickSort(LBound, i - 1); if j + 1 < UBound then QuickSort(j + 1, UBound) end; QueryPerformanceCounter(finish); {proverka} if t = 1 then begin for i :=1 to Size-1 do if BaseArray[i]
Решение задачи: «Quick sort»
textual
Листинг программы
USES Windows; {---------------------------------------------------------} CONST MaxNumber = 700000; Size = 128000; {---------------------------------------------------------} VAR start,finish,res:int64; i,j,t:longint; BaseArray:array[1..size] of longint; Procedure Exchange(a,b:longint); VAR tmp:longint; Begin tmp:=BaseArray[a]; BaseArray[a]:=BaseArray[b]; BaseArray[b]:=tmp; end; {Сортировка} Procedure QuickSort(LBound, UBound:Longint); begin i := LBound; j := UBound; repeat while i <> j do if BaseArray[i] >= BaseArray[j] then dec(j) else begin Exchange(i, j); break end; while i <> j do if BaseArray[i] >= BaseArray[j] then inc(i) else begin Exchange(i, j); break end; until i = j; if i - 1 > LBound then QuickSort(LBound, i - 1); if j + 1 < UBound then QuickSort(j + 1, UBound) end; BEGIN Randomize; Repeat Writeln('1:Упорядочные'); Writeln('2:Обратный порядок'); Writeln('3:Вырожденные'); Writeln('4:Случайные'); readln(t); Until (t=1) or (t=2) or (t=3) or (t=4); randomize; Case t of 1: begin BaseArray[1] := MaxNumber; for i := 2 to Size do BaseArray[i] := BaseArray[i-1]-random(MaxNumber div Size)-1 end; 2: begin BaseArray[1] := 1; for i := 2 to Size do BaseArray[i] := BaseArray[i-1]+random(MaxNumber div Size)+1 end; 3: begin for i := 1 to Size do BaseArray[i] := random(12)+1; end; 4: begin for i := 1 to Size do BaseArray[i] := random(MaxNumber)+1 end; End; QueryPerformanceFrequency(res); QueryPerformanceCounter(start); QuickSort(1, Size); QueryPerformanceCounter(finish); {proverka} if t = 1 then begin for i :=1 to Size-1 do if BaseArray[i]<BaseArray[i+1] then begin writeln('Error!'); halt end; end; for j:=1 to Size do write(BaseArray[j],' '); Readln; Writeln('----------------------------------------'); Writeln('time:',(finish-start)*1000/res:10:10,'ms'); readln; End.
Объяснение кода листинга программы
- В данном коде реализована сортировка массива методом быстрой сортировки (Quick Sort).
- Код использует язык программирования Free Pascal.
- Задаче предшествует заголовок
USES Windows;
который указывает на использование модуля Windows для работы с функциями времени выполнения. - Константы
MaxNumber
иSize
определяют максимальное значение числа в массиве и размер массива соответственно. - В массиве
BaseArray
размером 128000 элементов хранятся числа, которые требуется отсортировать. - Перед началом сортировки пользователю предлагается выбрать один из четырех режимов: упорядоченные, обратный порядок, вырожденные, случайные.
- После выбора режима в массиве
BaseArray
случайным образом заполняются значения в соответствии с выбранным режимом. - Для измерения времени выполнения сортировки используется функция QueryPerformanceCounter.
- Если после сортировки элементы массива не упорядочены по возрастанию, выводится сообщение об ошибке.
- В конце программы выводится отсортированный массив и время выполнения сортировки в миллисекундах.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д