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.

Объяснение кода листинга программы

  1. В данном коде реализована сортировка массива методом быстрой сортировки (Quick Sort).
  2. Код использует язык программирования Free Pascal.
  3. Задаче предшествует заголовок USES Windows; который указывает на использование модуля Windows для работы с функциями времени выполнения.
  4. Константы MaxNumber и Size определяют максимальное значение числа в массиве и размер массива соответственно.
  5. В массиве BaseArray размером 128000 элементов хранятся числа, которые требуется отсортировать.
  6. Перед началом сортировки пользователю предлагается выбрать один из четырех режимов: упорядоченные, обратный порядок, вырожденные, случайные.
  7. После выбора режима в массиве BaseArray случайным образом заполняются значения в соответствии с выбранным режимом.
  8. Для измерения времени выполнения сортировки используется функция QueryPerformanceCounter.
  9. Если после сортировки элементы массива не упорядочены по возрастанию, выводится сообщение об ошибке.
  10. В конце программы выводится отсортированный массив и время выполнения сортировки в миллисекундах.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы