مرتب‌سازی و جستجو

الگوریتم‌های کلاسیک: Bubble Sort، جستجوی خطی و جستجوی دودویی روی آرایه.

الگوریتم‌های کلاسیک علوم کامپیوتر

مرتب‌سازی و جستجو دو مسئله بنیادی‌اند. بیایید سه الگوریتم معروف را با پاسکال بنویسیم!

۱. جستجوی خطی (Linear Search)

از اول تا آخر آرایه را بگرد و مقایسه کن — ساده اما برای آرایه‌های بزرگ کند:

function LinearSearch(const a: array of integer; target: integer): integer;
var
  i: integer;
begin
  Result := -1;   { پیدا نشد }
  for i := 0 to high(a) do
    if a[i] = target then
    begin
      Result := i;
      break;
    end;
end;

۲. جستجوی دودویی (Binary Search)

فقط روی آرایه مرتب! هر بار ناحیه جستجو را نصف می‌کند — فوق‌العاده سریع:

function BinarySearch(const a: array of integer; target: integer): integer;
var
  lo, hi, mid: integer;
begin
  lo := 0;
  hi := high(a);
  Result := -1;
  while lo <= hi do
  begin
    mid := (lo + hi) div 2;
    if a[mid] = target then
    begin
      Result := mid;
      break;
    end
    else if a[mid] < target then
      lo := mid + 1
    else
      hi := mid - 1;
  end;
end;
برای آرایه ۱۰۰۰ عنصری، جستجوی خطی تا ۱۰۰۰ مقایسه اما دودویی فقط ~۱۰ مقایسه! (log₂ 1000)

۳. مرتب‌سازی حبابی (Bubble Sort)

عناصر مجاور را مقایسه و در صورت نیاز جابجا کنید — بزرگ‌ها مثل حباب به آخر می‌روند:

procedure BubbleSort(var a: array of integer);
var
  i, j, temp: integer;
begin
  for i := 0 to high(a) - 1 do
    for j := 0 to high(a) - 1 - i do
      if a[j] > a[j + 1] then
      begin
        temp := a[j];
        a[j] := a[j + 1];
        a[j + 1] := temp;
      end;
end;

مثال کامل

program SortSearch;
const
  N = 8;
var
  data: array[1..N] of integer;
  i, idx: integer;

procedure PrintArray;
var i: integer;
begin
  for i := 1 to N do
    write(data[i]:4);
  writeln;
end;

begin
  { داده نامرتب }
  data[1] := 42; data[2] := 7; data[3] := 99; data[4] := 13;
  data[5] := 55; data[6] := 1; data[7] := 68; data[8] := 25;

  writeln('Before: ');
  PrintArray;

  { مرتب‌سازی حبابی روی data }
  { ... کد بالا }

  writeln('After: ');
  PrintArray;
end.

پیچیدگی — چقدر سریع؟

الگوریتمپیچیدگیبرای ۱۰۰۰ عنصر
جستجوی خطیO(n)تا ۱۰۰۰ مقایسه
جستجوی دودوییO(log n)~۱۰ مقایسه
Bubble SortO(n²)~۱,۰۰۰,۰۰۰ عمل
Quick Sort (پیشرفته)O(n log n)~۱۰,۰۰۰ عمل

خلاصه

این مبحث بخشی از دوره آموزش کامل پاسکال است.

ابزارهای مرتبط