SlideShare une entreprise Scribd logo
1  sur  41
Эрэмбэлэлтийн 
энгийн аргууд 
Өгөгдлийн бүтэц лекц 9
Эрэмбэлэлтийн аргууд 
 Програмын тооцоолох ажилд нөлөөлөх нэг үндсэн үйлдэл 
бол эрэмбэлэлт юм. 
 Объектуудын өгөгдсөн олонлогийг өгөгдсөн шинж чанараар 
нь эрэмбэлэх процессыг эрэмбэлэлт гэнэ. 
 Эрэмбэлэлт нь өгөгдлүүдийг тодорхой дарааллаар 
тухайлбал, өсөхөөр эсвэл буурахаар зохион байгуулах 
үйлдэл юм.
Агуулга 
 Эрэмбэлэлтийн тухай 
 Сонгон эрэмбэлэх арга 
 Оруулан эрэмбэлэх арга 
 Бөмбөлгөн эрэмбэлэх арга 
 Байрыг нь солин эрэмбэлэх арга
Эрэмбэлэлтийн аргууд 
 Эрэмблэх өгөгдөл нь хэд хэдэн талбаруудаас тогтох 
бичлэг байж болох ба энэ тохиолдолд эрэмблэлтийг аль 
нэг талбарын утгаар хийдэг. Энэ талбарыг түлхүүр гэж 
нэрэлдэг. 
 Хэрэв эрэмблэх нийт өгөгдөл нь санах ойд хүрэлцэхүүц 
бага хэмжээтэй бол дотоод эрэмблэлт гэнэ. 
 Хэрэв өгөгдлийн хэмжээ нь дотоод эрэмблэлтээр 
хйигдхээргүй их хэмжээтэй бол гадаад эрэмблэлт гэнэ. 
Өөрөөр хэлбэл гадаад эрэмблэлтийг дискэн дээр хийдэг.
Эрэмбэлэлтийн аргууд 
 Массивын элемент болох өгөгдлүүдийг дараах байдлаар 
эрэмбэлж болно
Эрэмбэлэлтийн аргууд 
 Эрэмбэлэгдсэн өгөгдөл хайлтыг хурдасгах ач 
холбогдолтой. 
 Хэрэв өгөгдөл нь эрэмбэлэгдээгүй бол бид хүссэн 
өгөгдлөө авахын тулд өгөгдлийн эхнээс нь дараалан 
хайхаас өөр аргагүй.
Эрэмбэлэлтийн аргууд 
 Эрэмбэлэх өгөгдлийн тоо болон програмын зорилгоос 
хамааран эрэмбэлэлтийн олон ялгаатай аргуудаас 
тохирохыг нь сонгож хэрэглэх хэрэгтэй. 
 Эрэмбэлэлтийн аргуудыг харьцуулах гол хэмжүүр бол 
тэдгээрийн ажиллах хугацаа юм. 
 Эрэмбэлэлтийн алгоримтуудын түлхүүр үйлдэл 
нь: 
 Харьцуулах үйлдэл 
 Утга солилцох үйлдэл гэсэн хоѐр үйлдлээр 
тодорхойлогддог
Эрэмбэлэлтийн аргууд 
 Гэвч эрэмбэлэлтийн алгоритмуудын хувьд 
харьцуулалтын тоо нь илүү чухал байдаг. 
 Эрэмбэлэлтийн алгоримтын өөр нэг хэмжүүр бол 
шаардагдах нэмэлт санах ой юм. Зарим алгоритм 
нэмэлт зай ашигладаггүй байхад зарим нь N өгөгдлийг 
давхар хадгалах нэмэлт зайг шаарддаг.
Эрэмбэлэлтийн аргууд 
Энд массивын 2 элемент солилцох swap() функцыг тодорхойлъё: 
void swap(Type a[], int i, int j){ 
Type temp=a[i]; 
a[i]=a[j]; 
a[j]=temp; 
}
Сонгон эрэмбэлэх арга – Selection 
Sort 
 Аргын үндсэн санаа: 
1. Элемэнтийн олонлогоос хамгийн бага/их 
элементийг сонгон олно. 
2. Массивын хамгийн эхний/хамгийн их 
элементтэй хамгийн бага элементийн байрыг нь 
солино. Үүний дараа массивын хамгийн 
бага/хамгийн их элемент нь жинхэнэ эзлэх ѐстой 
байраа эзэлнэ. 
3. Үлдсэн (N-1) ширхэг элементийн хувьд (1)-(2) 
алхмыг давтан гүйцэтгэн өөрийнхөө байх ѐстой 
байрыг эзлээгүй нэг ч элемент үлдэхгүй болтол 
нь үргэлжлүүлнэ
Сонгон эрэмбэлэх арга – Selection 
Sort 
 Нийтдээ дээрх (1)-(2) алхмыг (n-1) удаа давтан гүйцэтгэх 
ба эрэмбэлэлтийн процессын явцад массивын 
эрэмбэлэгдсэн хэсэг нь өргөсөж эрэмбэлэгдээгүй хэсэг нь 
багасах юм. 
 Энэ арга нь үлдэж байгаа хэсэг бүрээс хамгийн 
бага/хамгийн их элемэнтийг сонгож байгаа учир сонгон 
эрэмбэлэлтийн арга гэж нэрлэсэн
Сонгон эрэмбэлэх арга – Selection 
Sort
Сонгон эрэмбэлэх арга – Selection 
Sort
Сонгон эрэмбэлэх арга – Selection 
Sort
Сонгон эрэмбэлэх арга – Selection 
Sort
Сонгон эрэмбэлэх арга – Selection 
Sort 
void SelectionSort(Type a[], int n) 
{ int i,j,min; 
for(i=0;i<n-1;i++) { 
min=i; 
for (j=i+1;j<n;j++) 
if (a[j]<a[min]) min=j; 
swap(a,i,min); 
} 
}
Жишээ 
0 1 2 3 4 5 6 7 8 9 
утга 3 0 1 8 7 2 5 4 9 6
Оруулан эрэмбэлэх арга 
 Оруулан эрэмблэх алгоритм нь сонгон эрэмблэх 
алгоритмаас магадгүй илүү уян хатан шинж чанартай. 
 Энэ аргын үндсэн үйлдэл нь эрэмбэлэгдсэн олонлогт 
эрэмбийг нь алдагдуулахгүйгээр шинэ элемэнт оруулах 
үйлдлээр тодорхойлогддог. 
 Өөрөөр хэлбэл эрэмбэлэгдсэн элемэнтүүдийн шинэ 
элемэнтээс их элемэнтүүдийг нэг байрлал баруун тийш 
шилжүүлэх байдлаар орвол зохих байрлалыг чөлөөлж 
өгдөг
Оруулан эрэмбэлэх арга
Оруулан эрэмбэлэх арга
Оруулан эрэмбэлэх арга 
 Шинээр оруулах элемэнтийг массивын 2 дахь элемэнтээс эхлэн 
авна. 
 Эхний алхамд хамгийн эхний элемэнтийг эрэмбэлэгдсэн 
массив гэж үзэн 2 дахь элемэнтийг эхний элемэнттэй 
харьцуулан байрлалыг нь олсноор 2 элемэнттэй эрэмбэлэгдсэн 
массив гарган авна. 
 Удаах алхамд үүссэн 2 элемэнт бүхий эрэмбэлэгдсэн 
массивтаа массивын 3 дахь элемэнтийг оруулах байдлаар 
массивын төгсгөл хүртэл бүх элемэнтийн хувьд давтан 
гүйцэтгэнэ.
InsertionSort функц: 
void InsertionSort(Type a[], int n){ 
int i,j; 
Type elem; 
for(i=1; i<n; i++){ 
elem=a[i]; j=i-1; 
while(j>=0 && elem<a[j]) 
{ a[j+1]=a[j]; 
j=j-1; 
} a[j+1]=elem; 
} 
}
Сонгон эрэмбэлэх арга 
Оруулан эрэмбэлэх арга
Бөмбөлгөн эрэмбэлэлтийн арга 
 Энэ аргын мөн чанар нь олонлогийн элемэнтүүдийг 
эхнээс нь эцэс хүртэл хос хосоор нь сонгон авч буруу 
байрлалтай буюу өөрөөр хэлбэл i< j үед a[i]>a[j] байх 
тийм хос элемэнтүүдийн байрыг солих явдал юм
Бөмбөлгөн эрэмбэлэлтийн арга 
 Элемэнтүүдийг хос хосоор нь сонгон авч буруу 
байрлалтай бол тэдгээрийн байрыг солино тийм биш бол 
өөрчлөхгүй хэвээр нь үлдээх гэх мэтээр цааш 
үргэлжлүүлнэ. 
 Үр дүнд нь хамгийн их утгатай элемэнт массивын 
төгсгөлд байрлана. 
 Ийнхүү хамгийн их утгатай элемэнт нь өөрийнхөө 
байрлалыг эзлэх тул түүнээс бусад элемэнтүүдээс тогтох 
массивын хэсгийг авч түүн дээр өмнөх үйлдлүүдийг 
давтан гүйцэтгэх процессыг авч үлдэж буй хэсэг дэхь 
элемэнтийн тоо 2-оос багасахгүй болтол нь үргэлжлүүлнэ
Бөмбөлгөн эрэмбэлэлтийн арга 
BubbleSort функц: 
void BubbleSort(Type a[], int n){ 
int i,j; 
for(i=n-1;i>0;i--) 
for (j=0;j<i;j++) 
if (a[j]>a[j+1]) 
swap(a,j,j+1); 
}
Бөмбөлгөн эрэмбэлэлтийн арга
Бөмбөлгөн эрэмбэлэлтийн арга
Бөмбөлгөн эрэмбэлэлтийн 
арга
Байрыг нь солин эрэмбэлэх арга- 
Shell sort 
 Энэ аргыг 1959 онд Donald Shell гэдэг хүн оруулан 
эрэмбэлэх аргын элемэнтийн эцсийн байрлалдаа орох 
шилжилтийг хурдасган сайжруулж боловсруулсан. 
 Оруулан эрэмбэлэх арга нь харьцуулалтыг өмнөх 
элемэнтүүдтэй дэс дараалан хийж, шилжилтийг зөвхөн 
зэргэлдээ байрлалын хувьд хийдэг учраас удаан байдаг. 
 Байрыг нь солин эрэмбэлэх арга нь оруулан эрэмбэлэх 
аргын зарчмаар ажиллах боловч харьцуулалт болон 
шилжилтийг тодорхой алхмын зайтайгаар хол хол хийдэг
Байрыг нь солин эрэмбэлэх арга- 
Shell sort 
 Тухайн алхамын зайг h гэж үзвэл массивын h алхам дахь 
элемэнт бүрийн хувьд эрэмбэлэлтийг хийх ба массивт бие 
биенээсээ үл хамаарах h ширхэг эрэмбэлэгдсэн хэсэг 
үүснэ. 
 Массивын хувьд алхмын зайг тодорхойлохдоо массивын 
элемэнтийн тоог 2-т бүхлээр хуваах замаар тодорхойлно
Байрыг нь солин эрэмбэлэх арга- 
Shell sort
Байрыг нь солин эрэмбэлэх арга- 
Shell sort
Байрыг нь солин эрэмбэлэх арга- 
Shell sort
Байрыг нь солин эрэмбэлэх арга- 
Shell sort
Байрыг нь солин эрэмбэлэх арга- 
Shell sort 
ShellSort функц: 
void ShellSort(int a[],int n){ 
int h,i,j,temp,right,left; 
h=n/2; 
while(h>0){ 
left=0; right=h; 
while(right<n){ 
i=right; temp=a[i];j=i-h; 
while(j>=0 && a[j]>temp){ 
a[j+h]=a[j]; j-=h; 
} 
a[j+h]=temp;left++;right++; 
} 
h/=2; 
} }
Дүгнэлт 
• Эрэмбэлэлт гэж юу вэ? 
• Дотоод эрэмбэлэлт гэж юу вэ? 
• Сонгон эрэмбэлэх арга гэж юу вэ? 
• Оруулан эрэмбэлэх аргын онцлог 
• Бөмбөлгөн эрэмбэлэх арга гэж юу вэ? 
• Эрэмбэлэх аргуудын ялгаа
ЖИШЭЭ КОД 
SELECTION SORT
SELECTION SORT 
#include <stdio.h> 
void selection_sort(); 
int a[50], n; 
main() 
{ 
int i; 
printf("nEnter size of an array: "); 
scanf("%d", &n); 
printf("nEnter elements of an array:n"); 
for(i=0; i<n; i++) 
scanf("%d", &a[i]); 
selection_sort(); 
printf("nnAfter sorting:n"); 
for(i=0; i<n; i++) 
printf("n%d", a[i]); 
getch(); 
}
SELECTION SORT 
void selection_sort() 
{ 
int i, j, min, temp; 
for (i=0; i<n; i++) 
{ 
min = i; 
for (j=i+1; j<n; j++) 
{ 
if (a[j] < a[min]) 
min = j; 
} 
temp = a[i]; 
a[i] = a[min]; 
a[min] = temp; 
} 
}
BUBBLE SORT программ бичнэ үү

Contenu connexe

Tendances

U.cs101 алгоритм программчлал-13
U.cs101   алгоритм программчлал-13U.cs101   алгоритм программчлал-13
U.cs101 алгоритм программчлал-13Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2Badral Khurelbaatar
 
Lec3 c++operator
Lec3 c++operatorLec3 c++operator
Lec3 c++operatorTuruu Tsogt
 
U.cs101 алгоритм программчлал-1(1)
U.cs101   алгоритм программчлал-1(1)U.cs101   алгоритм программчлал-1(1)
U.cs101 алгоритм программчлал-1(1)Badral Khurelbaatar
 
u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4Khuder Altangerel
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэцMuuluu
 
Багц мэдээлэл
Багц мэдээлэлБагц мэдээлэл
Багц мэдээлэлNandia Naagii
 
Салаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогуудСалаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогуудБаярсайхан Л
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголтЖавзмаа Ж
 

Tendances (20)

U.cs101 алгоритм программчлал-13
U.cs101   алгоритм программчлал-13U.cs101   алгоритм программчлал-13
U.cs101 алгоритм программчлал-13
 
Rdbms 300 test
Rdbms 300 testRdbms 300 test
Rdbms 300 test
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
Lec3 c++operator
Lec3 c++operatorLec3 c++operator
Lec3 c++operator
 
Лекц №1
Лекц №1Лекц №1
Лекц №1
 
U.cs101 алгоритм программчлал-1(1)
U.cs101   алгоритм программчлал-1(1)U.cs101   алгоритм программчлал-1(1)
U.cs101 алгоритм программчлал-1(1)
 
5 algorithm
5 algorithm5 algorithm
5 algorithm
 
Database 3
Database 3Database 3
Database 3
 
u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4
 
Java programchlal s.uuganbayr
Java programchlal s.uuganbayrJava programchlal s.uuganbayr
Java programchlal s.uuganbayr
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Багц мэдээлэл
Багц мэдээлэлБагц мэдээлэл
Багц мэдээлэл
 
Салаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогуудСалаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогууд
 
Лекц №11
Лекц №11Лекц №11
Лекц №11
 
Programchlaliin c hel
Programchlaliin c helProgramchlaliin c hel
Programchlaliin c hel
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголт
 
database 7-8
database 7-8database 7-8
database 7-8
 
2
22
2
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
Toon daraalal
Toon daraalalToon daraalal
Toon daraalal
 

En vedette (20)

9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
U.cs101 laborator 9
U.cs101 laborator 9U.cs101 laborator 9
U.cs101 laborator 9
 
массив
массивмассив
массив
 
C++
C++C++
C++
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
10r angiin jishig test
10r angiin jishig test10r angiin jishig test
10r angiin jishig test
 
Bodlogo
BodlogoBodlogo
Bodlogo
 
10r angiin jishig daalgawar
10r angiin jishig daalgawar10r angiin jishig daalgawar
10r angiin jishig daalgawar
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 
Bodlogo
BodlogoBodlogo
Bodlogo
 
it101 lecture-9
it101 lecture-9it101 lecture-9
it101 lecture-9
 
Ci hel
Ci helCi hel
Ci hel
 
Hogjiltei bodlogo
Hogjiltei bodlogoHogjiltei bodlogo
Hogjiltei bodlogo
 
Cs101 lec13
Cs101 lec13Cs101 lec13
Cs101 lec13
 
Cs101 lec14
Cs101 lec14Cs101 lec14
Cs101 lec14
 
Cs101 lec15,16
Cs101 lec15,16Cs101 lec15,16
Cs101 lec15,16
 
Java laboratoriin udirdamj 2
 Java laboratoriin udirdamj 2 Java laboratoriin udirdamj 2
Java laboratoriin udirdamj 2
 
It101 lecture 7-1
It101 lecture 7-1It101 lecture 7-1
It101 lecture 7-1
 
U.it101 lec6 2017.03.09
U.it101 lec6 2017.03.09U.it101 lec6 2017.03.09
U.it101 lec6 2017.03.09
 
Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 

Similaire à 9.эрэмбэлэлтийн аргууд

Similaire à 9.эрэмбэлэлтийн аргууд (8)

Өгөгдлийн бүтэц 2-3
Өгөгдлийн бүтэц 2-3Өгөгдлийн бүтэц 2-3
Өгөгдлийн бүтэц 2-3
 
Bvleg 6 recursion
Bvleg 6 recursionBvleg 6 recursion
Bvleg 6 recursion
 
Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргууд
 
Mathcad beginning-appendix
Mathcad beginning-appendixMathcad beginning-appendix
Mathcad beginning-appendix
 
Algoritm
AlgoritmAlgoritm
Algoritm
 
Dsi lec3-4
Dsi lec3-4Dsi lec3-4
Dsi lec3-4
 
Алгоритмын “салаалалт” бүтэц
Алгоритмын “салаалалт” бүтэцАлгоритмын “салаалалт” бүтэц
Алгоритмын “салаалалт” бүтэц
 
C lects (5)
C lects (5)C lects (5)
C lects (5)
 

Plus de Bayalagmaa Davaanyam

Online applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsOnline applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsBayalagmaa Davaanyam
 
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалМэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалBayalagmaa Davaanyam
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимBayalagmaa Davaanyam
 
Файлын оролт гаралт
Файлын оролт гаралтФайлын оролт гаралт
Файлын оролт гаралтBayalagmaa Davaanyam
 

Plus de Bayalagmaa Davaanyam (9)

Online applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsOnline applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cards
 
otp crid cards
otp crid cardsotp crid cards
otp crid cards
 
Social sciences bayalagmaa
Social sciences bayalagmaaSocial sciences bayalagmaa
Social sciences bayalagmaa
 
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалМэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчим
 
Файлын оролт гаралт
Файлын оролт гаралтФайлын оролт гаралт
Файлын оролт гаралт
 
Hash function
Hash functionHash function
Hash function
 
C standard library
C standard libraryC standard library
C standard library
 
Preproc
PreprocPreproc
Preproc
 

9.эрэмбэлэлтийн аргууд

  • 1. Эрэмбэлэлтийн энгийн аргууд Өгөгдлийн бүтэц лекц 9
  • 2. Эрэмбэлэлтийн аргууд  Програмын тооцоолох ажилд нөлөөлөх нэг үндсэн үйлдэл бол эрэмбэлэлт юм.  Объектуудын өгөгдсөн олонлогийг өгөгдсөн шинж чанараар нь эрэмбэлэх процессыг эрэмбэлэлт гэнэ.  Эрэмбэлэлт нь өгөгдлүүдийг тодорхой дарааллаар тухайлбал, өсөхөөр эсвэл буурахаар зохион байгуулах үйлдэл юм.
  • 3. Агуулга  Эрэмбэлэлтийн тухай  Сонгон эрэмбэлэх арга  Оруулан эрэмбэлэх арга  Бөмбөлгөн эрэмбэлэх арга  Байрыг нь солин эрэмбэлэх арга
  • 4. Эрэмбэлэлтийн аргууд  Эрэмблэх өгөгдөл нь хэд хэдэн талбаруудаас тогтох бичлэг байж болох ба энэ тохиолдолд эрэмблэлтийг аль нэг талбарын утгаар хийдэг. Энэ талбарыг түлхүүр гэж нэрэлдэг.  Хэрэв эрэмблэх нийт өгөгдөл нь санах ойд хүрэлцэхүүц бага хэмжээтэй бол дотоод эрэмблэлт гэнэ.  Хэрэв өгөгдлийн хэмжээ нь дотоод эрэмблэлтээр хйигдхээргүй их хэмжээтэй бол гадаад эрэмблэлт гэнэ. Өөрөөр хэлбэл гадаад эрэмблэлтийг дискэн дээр хийдэг.
  • 5. Эрэмбэлэлтийн аргууд  Массивын элемент болох өгөгдлүүдийг дараах байдлаар эрэмбэлж болно
  • 6. Эрэмбэлэлтийн аргууд  Эрэмбэлэгдсэн өгөгдөл хайлтыг хурдасгах ач холбогдолтой.  Хэрэв өгөгдөл нь эрэмбэлэгдээгүй бол бид хүссэн өгөгдлөө авахын тулд өгөгдлийн эхнээс нь дараалан хайхаас өөр аргагүй.
  • 7. Эрэмбэлэлтийн аргууд  Эрэмбэлэх өгөгдлийн тоо болон програмын зорилгоос хамааран эрэмбэлэлтийн олон ялгаатай аргуудаас тохирохыг нь сонгож хэрэглэх хэрэгтэй.  Эрэмбэлэлтийн аргуудыг харьцуулах гол хэмжүүр бол тэдгээрийн ажиллах хугацаа юм.  Эрэмбэлэлтийн алгоримтуудын түлхүүр үйлдэл нь:  Харьцуулах үйлдэл  Утга солилцох үйлдэл гэсэн хоѐр үйлдлээр тодорхойлогддог
  • 8. Эрэмбэлэлтийн аргууд  Гэвч эрэмбэлэлтийн алгоритмуудын хувьд харьцуулалтын тоо нь илүү чухал байдаг.  Эрэмбэлэлтийн алгоримтын өөр нэг хэмжүүр бол шаардагдах нэмэлт санах ой юм. Зарим алгоритм нэмэлт зай ашигладаггүй байхад зарим нь N өгөгдлийг давхар хадгалах нэмэлт зайг шаарддаг.
  • 9. Эрэмбэлэлтийн аргууд Энд массивын 2 элемент солилцох swap() функцыг тодорхойлъё: void swap(Type a[], int i, int j){ Type temp=a[i]; a[i]=a[j]; a[j]=temp; }
  • 10. Сонгон эрэмбэлэх арга – Selection Sort  Аргын үндсэн санаа: 1. Элемэнтийн олонлогоос хамгийн бага/их элементийг сонгон олно. 2. Массивын хамгийн эхний/хамгийн их элементтэй хамгийн бага элементийн байрыг нь солино. Үүний дараа массивын хамгийн бага/хамгийн их элемент нь жинхэнэ эзлэх ѐстой байраа эзэлнэ. 3. Үлдсэн (N-1) ширхэг элементийн хувьд (1)-(2) алхмыг давтан гүйцэтгэн өөрийнхөө байх ѐстой байрыг эзлээгүй нэг ч элемент үлдэхгүй болтол нь үргэлжлүүлнэ
  • 11. Сонгон эрэмбэлэх арга – Selection Sort  Нийтдээ дээрх (1)-(2) алхмыг (n-1) удаа давтан гүйцэтгэх ба эрэмбэлэлтийн процессын явцад массивын эрэмбэлэгдсэн хэсэг нь өргөсөж эрэмбэлэгдээгүй хэсэг нь багасах юм.  Энэ арга нь үлдэж байгаа хэсэг бүрээс хамгийн бага/хамгийн их элемэнтийг сонгож байгаа учир сонгон эрэмбэлэлтийн арга гэж нэрлэсэн
  • 16. Сонгон эрэмбэлэх арга – Selection Sort void SelectionSort(Type a[], int n) { int i,j,min; for(i=0;i<n-1;i++) { min=i; for (j=i+1;j<n;j++) if (a[j]<a[min]) min=j; swap(a,i,min); } }
  • 17. Жишээ 0 1 2 3 4 5 6 7 8 9 утга 3 0 1 8 7 2 5 4 9 6
  • 18. Оруулан эрэмбэлэх арга  Оруулан эрэмблэх алгоритм нь сонгон эрэмблэх алгоритмаас магадгүй илүү уян хатан шинж чанартай.  Энэ аргын үндсэн үйлдэл нь эрэмбэлэгдсэн олонлогт эрэмбийг нь алдагдуулахгүйгээр шинэ элемэнт оруулах үйлдлээр тодорхойлогддог.  Өөрөөр хэлбэл эрэмбэлэгдсэн элемэнтүүдийн шинэ элемэнтээс их элемэнтүүдийг нэг байрлал баруун тийш шилжүүлэх байдлаар орвол зохих байрлалыг чөлөөлж өгдөг
  • 21. Оруулан эрэмбэлэх арга  Шинээр оруулах элемэнтийг массивын 2 дахь элемэнтээс эхлэн авна.  Эхний алхамд хамгийн эхний элемэнтийг эрэмбэлэгдсэн массив гэж үзэн 2 дахь элемэнтийг эхний элемэнттэй харьцуулан байрлалыг нь олсноор 2 элемэнттэй эрэмбэлэгдсэн массив гарган авна.  Удаах алхамд үүссэн 2 элемэнт бүхий эрэмбэлэгдсэн массивтаа массивын 3 дахь элемэнтийг оруулах байдлаар массивын төгсгөл хүртэл бүх элемэнтийн хувьд давтан гүйцэтгэнэ.
  • 22. InsertionSort функц: void InsertionSort(Type a[], int n){ int i,j; Type elem; for(i=1; i<n; i++){ elem=a[i]; j=i-1; while(j>=0 && elem<a[j]) { a[j+1]=a[j]; j=j-1; } a[j+1]=elem; } }
  • 23. Сонгон эрэмбэлэх арга Оруулан эрэмбэлэх арга
  • 24. Бөмбөлгөн эрэмбэлэлтийн арга  Энэ аргын мөн чанар нь олонлогийн элемэнтүүдийг эхнээс нь эцэс хүртэл хос хосоор нь сонгон авч буруу байрлалтай буюу өөрөөр хэлбэл i< j үед a[i]>a[j] байх тийм хос элемэнтүүдийн байрыг солих явдал юм
  • 25. Бөмбөлгөн эрэмбэлэлтийн арга  Элемэнтүүдийг хос хосоор нь сонгон авч буруу байрлалтай бол тэдгээрийн байрыг солино тийм биш бол өөрчлөхгүй хэвээр нь үлдээх гэх мэтээр цааш үргэлжлүүлнэ.  Үр дүнд нь хамгийн их утгатай элемэнт массивын төгсгөлд байрлана.  Ийнхүү хамгийн их утгатай элемэнт нь өөрийнхөө байрлалыг эзлэх тул түүнээс бусад элемэнтүүдээс тогтох массивын хэсгийг авч түүн дээр өмнөх үйлдлүүдийг давтан гүйцэтгэх процессыг авч үлдэж буй хэсэг дэхь элемэнтийн тоо 2-оос багасахгүй болтол нь үргэлжлүүлнэ
  • 26. Бөмбөлгөн эрэмбэлэлтийн арга BubbleSort функц: void BubbleSort(Type a[], int n){ int i,j; for(i=n-1;i>0;i--) for (j=0;j<i;j++) if (a[j]>a[j+1]) swap(a,j,j+1); }
  • 30. Байрыг нь солин эрэмбэлэх арга- Shell sort  Энэ аргыг 1959 онд Donald Shell гэдэг хүн оруулан эрэмбэлэх аргын элемэнтийн эцсийн байрлалдаа орох шилжилтийг хурдасган сайжруулж боловсруулсан.  Оруулан эрэмбэлэх арга нь харьцуулалтыг өмнөх элемэнтүүдтэй дэс дараалан хийж, шилжилтийг зөвхөн зэргэлдээ байрлалын хувьд хийдэг учраас удаан байдаг.  Байрыг нь солин эрэмбэлэх арга нь оруулан эрэмбэлэх аргын зарчмаар ажиллах боловч харьцуулалт болон шилжилтийг тодорхой алхмын зайтайгаар хол хол хийдэг
  • 31. Байрыг нь солин эрэмбэлэх арга- Shell sort  Тухайн алхамын зайг h гэж үзвэл массивын h алхам дахь элемэнт бүрийн хувьд эрэмбэлэлтийг хийх ба массивт бие биенээсээ үл хамаарах h ширхэг эрэмбэлэгдсэн хэсэг үүснэ.  Массивын хувьд алхмын зайг тодорхойлохдоо массивын элемэнтийн тоог 2-т бүхлээр хуваах замаар тодорхойлно
  • 32. Байрыг нь солин эрэмбэлэх арга- Shell sort
  • 33. Байрыг нь солин эрэмбэлэх арга- Shell sort
  • 34. Байрыг нь солин эрэмбэлэх арга- Shell sort
  • 35. Байрыг нь солин эрэмбэлэх арга- Shell sort
  • 36. Байрыг нь солин эрэмбэлэх арга- Shell sort ShellSort функц: void ShellSort(int a[],int n){ int h,i,j,temp,right,left; h=n/2; while(h>0){ left=0; right=h; while(right<n){ i=right; temp=a[i];j=i-h; while(j>=0 && a[j]>temp){ a[j+h]=a[j]; j-=h; } a[j+h]=temp;left++;right++; } h/=2; } }
  • 37. Дүгнэлт • Эрэмбэлэлт гэж юу вэ? • Дотоод эрэмбэлэлт гэж юу вэ? • Сонгон эрэмбэлэх арга гэж юу вэ? • Оруулан эрэмбэлэх аргын онцлог • Бөмбөлгөн эрэмбэлэх арга гэж юу вэ? • Эрэмбэлэх аргуудын ялгаа
  • 39. SELECTION SORT #include <stdio.h> void selection_sort(); int a[50], n; main() { int i; printf("nEnter size of an array: "); scanf("%d", &n); printf("nEnter elements of an array:n"); for(i=0; i<n; i++) scanf("%d", &a[i]); selection_sort(); printf("nnAfter sorting:n"); for(i=0; i<n; i++) printf("n%d", a[i]); getch(); }
  • 40. SELECTION SORT void selection_sort() { int i, j, min, temp; for (i=0; i<n; i++) { min = i; for (j=i+1; j<n; j++) { if (a[j] < a[min]) min = j; } temp = a[i]; a[i] = a[min]; a[min] = temp; } }
  • 41. BUBBLE SORT программ бичнэ үү

Notes de l'éditeur

  1. Програм тооцоолох ажилд нөлөөлөх нэг үндсэн үйлдэд нь эрэмблэлт юм. Эрэмблэлт нь өгөгдлүүдийг тодорхой дарааллаар тухайлбал, өсхөөр эсвэл буурхаар зохион байгуулах үйлдэл юм. Эрэмблэгдсэн өгөгдөл нь хайлтыг түргэсгэхэд их ач холбогдолтой. Хэрэв өгөгдөл нь эрэмблэгдээгүй бол бид хүссэн өгөгдлөө авхын тулд өгөгдлийн эхнээс дарааллан хайхаас өөр аргагүй. Ер нь эрэмблэх үйлдэл нь програмын ажлын явцад зөвхөн ганц удаа (эсвэл цөөхөн) хийгддэг.
  2. Эрэмблэлтийн алгоритмын өөр нэг шалгуур бол түүний тогтвортой чанар юм. Хэрэв эрэмблэлтийн алгоритм нь тогтвортой бол ижил түлхүүр талбар бүхий элементүүд өөр талбраараа мөн элементгдсэн байдаг. Жишээлбэл оюутнуудын бичлэгийн дүнгээр эрэмблэхэд үүсэх дараалал ижил дүнтэй оюутнууд нэрээрээ эрэмблэгдсэн байдаг.
  3. Оруулан эрэмблэх арга нь харьцуулалтын өмнөх элементээс дэс дарааллан хийж шилжилтийн зөвхөн зэргэлдээ байрлалын хувьд хийдэг учир удаан. Жишээлбэл массивын төгсгөлд хамгийн бага элемент байвал n шилжилт хийсний дараа байрлалаа олох боломжтой болно. Тэгвэл shell-ийн арга нь оруулан эрэмблэх аргын зарчмаар ажиллах боловч харьцуулалт болон шилжилтийг тодорхой алхмын зайтаагаар хол хол хийдэг.