Saturday, February 12, 2011

Сонгон эрэмбэлэх арга (Selection Sort)

Сонгон эрэмбэлэх арга нь массивын хамгийн бага элементийг олж хамгийн эхний элементтэй сольж, дараа нь удаах хамгийн бага элементийг олж хоёрдох элементтэй солих байдлаар массивын бүх элмент эрэмбэлэгдэж дуустал гүйцэтгэгдэх арга юм.
Хэрэв буурахаар эрэмбэлэх бол хамгийн их элементийг сонгож солино гэсэн үг. Энэ арга нь маш амархан, эсрэгээрээ хурдны хувьд тийм ч сайн арга биш. Ямар ч төрлийн бага өгөгдөлтэй массивын хувьд бол Ок арга.
Жишээ. N элементтэй бүхэл тоон массивыг өсөхөөр эрэмбэлэе.
1. Си хэл
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[100], n, i, j, min, temp;
//Massivyn elementiin too
printf(" n = ");
scanf("%d", &n);
//Massivyn elementuudiig oruulakh
for(i=0; i<n; i++) {
printf(" a[%d] = ", i);
scanf("%d", &a[i]);
}
for(i=0; i<n-1; i++) {
//Khamgiin baga elementiin dugaar buyu indexiig min-d hadgalya
min = i;
for(j=i+1; j<n; j++)
if(a[min] > a[j])
min = j;
//Khamgiin baga elementiig erembelegdeegui khesgiin khamgiin ehnii elementtei bairyg ni solino
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
printf("Khariu:");
for(i=0; i<n; i++)
printf(" %d", a[i]);
system("pause");
}

2. Паскаль хэл
Program SelectionSort; Var a: array[1..100] of integer;
n, i, j, min, temp: integer; Begin
{Massivyn elementiin too}
Write(' n = ');
Read(n);
{Massivyn elementuudiig oruulakh}
for i:=1 to n do begin
Write(' a[',i,'] = ');
Read(a[i]);
end;
for i:=1 to n-1 do begin
{Khamgiin baga elementiin dugaar buyu indexiig min-d khadgalya}
min := i;
for j:=i+1 to n do if(a[min] > a[j]) then min := j;
{Khamgiin baga elementiig erembelegdeegui khesgiin khamgiin ekhnii elementtei bairyg ni solino}
temp := a[i];
a[i] := a[min];
a[min] := temp; end; Write('Khariu:');
for i:=1 to n do Write(' ', a[i]);
End.

2 comments:

  1. uunii angli ni hna bgaan

    ReplyDelete
  2. Ойсонгүй. Англи нь хаана байх ёстой гэж?

    ReplyDelete