Thursday, February 17, 2011

Бөмбөглөн эрэмбэлэх арга (Bubble Sort)

Энэ аргыг хөөсрүүлэн эрэмбэлэх арга ч гэж нэрлэдэг. Массивын элементүүдийг эхнээс нь зэрэгцээ байгаа хоёр элементийг жишиж өмнөх буюу индексээрээ бага элемент нь хойно байгаа буюу индексээрээ их элементээс их байвал (бууруухаар эрэмбэлэх тохиолдолд бага байвал) энэ хоёр элемэнтийн байрыг солих замаар массивын төгсгөл хүртэл үргэлжлүүлнэ. Тухайлбал, a[i] > a[i+1] бол энэ хоёрын байрыг солино гэсэн үг. Эсрэг тохиолдолд хэвээр үлдээнэ. Ингэсэнээр хамгийн их элемент массивын хамгийн сүүлд байрлана. Дараа нь үлдсэн n-1 элементэд мөн энэ үйлдлийг давтаж, нэг элемент үлдтэл (n==1 болтол) хийнэ.
Жишээ. N элементтэй бодит тоон массивыг өсөхөөр эрэмбэлэ.
1. Си хэл
#include <stdio.h>
#include <stdlib.h>
int main() {
float a[100], temp;
int n, i, j;
printf(" n = ");
scanf("%d", &n);
for(i=0; i<n; i++) {
printf(" a[%d] = ", i);
scanf("%f", &a[i]);
}
for(i=n-1; i>0; i--)
for(j=0; j<i; j++)
if(a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
printf("\nKhariu:");
for(i=0; i<n; i++)
printf(" %.2f", a[i]);
system("pause");
}

2. Паскаль хэл
Program Bubble_Sort;
var
a:array[1..100] of real;
temp: real;
n, i, j: integer;
begin
Write(' n = ');
Read(n);
for i:=1 to n do begin
write(' a[',i,'] = ');
read(a[i]);
end;for i:=n downto 2 do
for j:=1 to i-1 do
if a[j] > a[j+1] then begin
temp := a[j];
a[j] := a[j+1];
a[j+1] := temp;
end;

Write('Khariu:');
for i:=1 to n do
Write(' ', a[i]:0:2);
end.

2 comments: