SlideShare a Scribd company logo
1 of 30
ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ, 
Е-НЭЭЛТТЭЙ ИНСТИТУТ 
Эрэмбэлэх алгоритм 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
www.emust.edu.mn 
Лекц – 13
Агуулга: 
01 
Эрэмбэлэлтийн тухай 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
www.emust.edu.mn 
01 
02 
02 
Сонгон эрэмбэлэх арга 
03 
Оруулан эрэмбэлэх арга 
04 Бөмбөлөгөн эрэмбэлэх арга
Судлах зүйл: 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Эрэмбэлэлтийн тухай 
Программын тооцоолох ажилд нөлөөлөх нэг үндсэн үйлдэл бол 
эрэмбэлэлт юм.Эрэмбэлэлт нь өгөгдлүүдийг тодорхой дарааллаар 
тухайлбал, өсөхөөр эсвэл буурахаар зохион байгуулах үйлдэл юм. 
Жишээлбэл: а1 , а2 , … аn өгөгдлийг өсөхөөр эрэмбэлэгдсэн гэвэл : 
а1 ≤, а2 , ≤… ≤аn нөхцөлийг хангах болно. Эрэмбэлэгдсэн өгөгдөл 
нь хайлтийг хурдасгах чухал ач холбогдолтой.Хэрэв өгөгдөлүүд нь 
эмбэлэгдээгүй бол бид хүссэн өгөгдөлөө авахын тулд өгөгдлийг 
эхнээс нь дараалан хайхаас өөр аргагүй. Харин өгөдөл нь 
эрэмбэлэгдсэнээр түүнд хийх хайлтыг хурдасгах зарим 
алгоритмийг тодорхойлж болдог. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Эрэмбэлэлтийн алгоритмуудыг судлах эхний хэсэгт бид 
эрэмбэлэлтийн энгийн аргуудтай танилцах юм.Эрэмбэлэлт нь хийхэд 
энгийн аргуудыг сонгох зарим хэрэглээ ба шаардлага байдаг.Ер нь 
эрэмбэлэх үйлдэл нь программын ажлын явцад зөвхөн ганц удаа 
(эсвэл цөөхөн) хийгддэг.Хэрэв эрэмбэлэх өгөгдлийн тоо нь асар олон 
биш бол энгийн эрэмбэлэлтийн аргууд нь илүү үр ашигтай байхаас 
гадна нэвтрүүлэлт болон шалгалт хийхэд хялбар байдаг. Энгийн 
аргууд цөөхөн өгөгдлийн хувьд ямагт тохиромжтой 
байдаг.Өгөгдлийн өөр нэг өгөгдөх хэлбэр бол өгөгдлүүд нь бараг 
эрэмбэлэгдсэн (аль эсвэл аль хэдийн эрэмбэлэгдсэн) эсвэл маш олон 
тооны тэнцүү өгөгдлүүд (түлхүүр талбарын өгөгдөл) агуулсан байж 
болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Эрэмбэлэгдэх өгөгдөл нь хэд хэдэн талбаруудаас тогтох бичлэгүүд 
байж болох ба энэ тохиолдолд эрэмбэлэлтийг аль нэг талбарын 
утгаар хийдэг. Энэ талбарыг түлхүүр гэж нэрлэдэг. Энд 
эрэмбэлэлтийн алгоритмуудын программыг ойлгомжтой, 
хялбархан болгох зорилгоор бүхэл тоо, тэмдэгт зэрэг энгийн 
өгөгдлийн төрөлтэй массивийн хувьд эрэмбэлэлтийг гүйцэтгэхээр 
тодорхойлж өгсөн. Хэрэв эрэмбэлэгдэх нийт өгөгдөл нь санах ойд 
хүрэлцэхүйц бага хэмжээтэй бол дотоод эрэмбэлэлт гэнэ. 
Эрэмбэлэлтын аргуудыг харьцуулах гол хэмжүүр бол тэдгээрийн 
ажиллах хугацаа юм. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Эрэмбэлэлтийн алгоритмын түлхүүр үйлдэл нь харьцуулах ба утга 
солилцох гэсэн үндсэн үйлдлээр тодорхойлогддог. Гэвч 
эрэмбэлэлтийн алгоритмын хувьд харьцуулалтын тоог илүү 
сонирхдог.Алгоритмын ажиллах хугацааг хамгийн муу ба дундаж 
гэсэн хоёр тохиолдлын хувьд хэлэлцдэг.Бид N өгөгдлийн хувьд 
ажиллах хугацаа нь N2 шаардах алгоритмаас эхлээд N шаардах 
алгоритмуудыг үзэх болно. 
Эрэмбэлэлтийн алгоритмын өөр нэг хэмжүүр бол шаардагдах нэмэлт 
санах ойн хэмжээ юм.Зарим алгоритм (шаардагдах маш бага зайг үл 
тооцвол) нэмэлт зай ашигладаггүй байхад зарим нь N өгөгдлийг 
давхар хадгалах нэмэлт зайг шаардаж байдаг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Сонгон эрэмбэлэх арга 
Эрэмбэлэлтийн эхний энгийн алгоритмаар сонгон эрэмбэлэх аргыг 
авч үзье. Энэ арга нь массив дахь хамгийн бага элементийг олж 
массивын эхний элементтэй сольж, дараа нь удаах бага элементийг 
олж массивын хоёр дахь элементтэй солих байдлаар массивын бүх 
элемент эрэмбэлэгдэж дуустал гүйцэтгэх арга юм, Энэ арга нь үлдэж 
байгаа хэсэг бүрээс хамгийн бага элемтентийг сонгож байгаа учир 
сонгон эрэмбэлэх арга гэж нэрлэсэн. Сонгон эрэмбэлэх алгоритмыг 
дараал selectionSort () функцээр тодорхойллоо. 
template<class Type> 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 ) ; 
Selection ( ) функцийг мөн загвар функцээр тодорхойллоо. i 
байрлалд түүнээс орших элементүүдийн хамгийн бага элемент 
орно. J индекс тусламжтайгаар I дүгээр байрлалаас хойшх 
элементүүдээс хамгийн бага элементүүдыг олж өмнөх хэсэгт 
тодорхойлсон swap () функцийг ашиглан функцуудыг сольж 
байна.Гадаад давталт буюу i индексийн давталт дуусахад 
массив бүрэн эрэмбэлэгдсэн байх болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
selectionSort ( ) функц нь нэгэнт загвар функцээр тодорхойлогдсон 
болохоор бид ямарч өгөгдлийн төрөл бүхий массивийг энэн 
функцэд дамжуулан эрэмбэлж чадна.Жишээлбэл int ба char 
төрөлтэй массивуудыг дээрх функцэд хэрхэн дамжуулахыг 
харцгаая. int a [ 8 ] = { 77, 33, 44, 11, 88, 22, 66, 55 } ; 
char s [ 15 ] = {‘a’ , ‘b’, ‘o’ , ‘r’, ‘t’, ‘n’ , 
‘g’, ‘e’, ‘x’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’} ; 
selectionSort ( a, 8) ; 
selectionSort ( s, 15) ; 
Эрэмбэлэлтийн энэ энгийн арга нь маш цөөхөн өгөгдөлтэй 
массивийн хувьд сайн ажилладаг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Сонгон эрэмбэлэх алгоритм нь өгөгдлийн анх өгөгдөх дарааллаас 
үл хамааран ойролцоогоор n2 харьцуулалт, n солилцох үйлдэл 
хийдэг.Дээрх алгоритмаас ажиглавал i гадаад давталтын алхам 
бүрт нэг солоилт ба n-1 харьцуулалт хийж байна. Иймээс нийт 
харьцуулалтын тообуюу алгоритмын ажиллах хугацааг 
илэрхийлэх £ ( n ) функцийн утга нь 
£ ( n ) = (n-1) + (n-2) +….+ 2 + 1 = n(n-1)/2 = O (n2) 
гэж тодорхойлогдоно. 
Иймд NM хэмжээтэй нийт өгөгдлийн эрэмбэлэгдэхэд 
N2харьцуулалт ба NM солилцох үйлдэл хийнэ.Хэрэв N=O(M) бол 
эрэмбэлэлтийн бүхэл өгөгдлийн хувьд шугаман гэж хэлж болох 
юм. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Оруулан эрэмбэлэх арга 
Оруулан эрэмбэлэх алгоритм нь сонгон эрэмбэлэлтийн 
алгоритмуудын нэг бөгөөд магадгүй илүү уян хатан , үр ашигтай 
байж болно.Энэ аргын үндсэн элемент нь эрэмбэлэгдсэн массивт 
эрэмбэлэлтийг алдагдуулахгүйгээр шинээр элемент охуулах 
үйлдлээр тодорхойлогддог.Өөрөөр хэлбэл эрэмбэлэгдсэн 
элементүүдийн шинэ элементээс их элементүүдын нэг байрлал 
баруунтийм шилжүүлэх байдлаар орвол зохих байрлалыг 
чөлөөлж өгдөг.Оруулан эрэмбэлэх алгоритмыг дараах 
InsertionSort ( ) функцээр үзүүллээ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
template<class Type> 
void insertitionSort (Type a [ ] , int I , int n ) { 
for (int I = 1 ; I < n; I ++) { 
Type element = a [ I ] ; 
Int j = I – 1 ; 
While ( j >= 0 && element < a [ j ] ) 
a [ j+1 ] = a [ j] ; 
a [ j+1 ] = element ; 
} 
} 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Шинээр оруулах элементийг гадаад давталт I –гээр массивийн 
хоёр дахь элементээс эхлэн авна.Эхний алхамд хамгийн эхний 
элементтэй харьцуулан байрлалыг нь олсноор хоёр элементтэй 
эрэмбэлэгдсэн массив гарган авна.Удаах алхамд, үүсгэсэн хоёр 
элемент бүхий эрэмбэлэгдсэн массивтаа массивийн гурав дахь 
элементийг оруулах байдлаар массивийн төгсгөл хүртэл бүх 
элементийн хувьд давтан гүйцэтгэнэ. Дээрх алгоритмын while 
дотоод давталтаар шинэ элементийг эрэмбэлэгдсэн гэх түүний 
өмнөх элементүүдээс тогтох массивийн хэсэгт оруулж өгөх 
үйлдэл хийгдэнэ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энэ давталт нь шинэ элементээс бага элемент тааралдтал хийгдэх 
ба харин их элементүүд нь хойшоо (баруун тийш) нэг шилжсэн 
шинэ элементэд зай гаргах болно.Хэрэв шинэ элемент өмнөх бүх 
элементүүдээс бага байх тохиолдолд j индекс багассаар 
массивийн хэмжээнээс (тэгээд бага болох ) өнгөрч болох юм.Энэ 
алдааг зохицуулах зорилгоор while давталтанд j>=0 гэсэн 
нөхцөлийг давхар оруулж өгсөн.Гэвч энэ нөхцөл нь j –ийн утга 
тэгээс бага болоогүй тохиолдолд бүрт илүүдэл шалгалтыг 
гүйцэтгэж байна. Энэ илүүдэл шалгалтаас зайлсхийх нэг арга бол 
масствийн эхний элементэд хязгааргүй бага (массивийн 
элементүүдээс харьцангуй бага) утга олнон ашигладаг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Эхний энэ элементийг харуул элемент гэж нэрлэдэг.Ингэснээр 
массивийн эхний элементийг массивийн үндсэн элементээр 
авахгүй бөгөөд дотоод давталтыг while ( element <a[ j ] ) гэж 
гүйцэтгэнэ.Гэвч ихэнх тохиолдолд массивийн элементүүдийн 
утгын доод хязгаарыг урьдчилан тодорхойлох боломжгүй 
байдгаас харуул элементийн утгыг тогтооход хүндрэлтэй 
байдаг. Оруулан эрэмбэлэх алгоритмын харьцуулалтын тоо f ( n 
) функцийг өмнөх аргын адил хялбархан тодорхойлж 
болно.Эхлээд хамгийн муу тохиолдол болох буурахаар 
эрэмбэлэгдсэн өгөгдлийн үед авч үзье. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энэ тохиолдолд массивийн k дахь элемент бүрийн хувьд дотоод 
давталтын хамгийн их k-1 харьцуулалтыг гүйцэтгэнэ.Эндээс f(n) 
= 1 + 2 + 3 + … + (n-1) / 2 O(n2) 
гэж тодорхойлогдох ба харьцуулалтын тооноос хоёр дахин бага 
солилцох үйлдэл хийгдэнэ.Учир нь оруулан эрэмбэлэх аргын 
элементийн шилжилтийг солилцох үйлдлийн хагастай адил гэж 
үзэж болох юм. 
Харин дундаж тохиолдолд дотоод давталт нь (k-1) /2 харьцуулалт 
хийдэг гэвэл 
f(n) = ½ + 2/2 + 3/2 + …+ (n-1) /2 = n(n-1) / 4 = O(n2) 
гэж тодорхойлогдоно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Оруулан эрэмбэлэх алгоритм нь “бараг эрэмбэлэгдсэн” өгөгдөлд 
шугаман ажилладаг.Энэ үед элементүүд нь нэн даруй байрлалдаа олох 
буюу дотоод давталтаар хамгийн ихдээ 1-ээс 2 удаа харьцуулалт 
хийгдэнэ.Иймд N харьцуулалтаар эрэмбэлэх болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Бөмбөлөгөн эрэмбэлэлтийн арга 
Энд бид эрэмбэлэлтийн энгийн аргуудын нэг бөмбөлгөн 
эрэмбэлэлтийн алгоритмтай танилцах болно.Энэ арга нь 
массивийн зэргэлдээ элементүүдийг хойш шилжүүлэн массивийн 
төгсгөлд байрлуулдаг.Ингэснээр хамгийн их элемент эцсийн 
байрлалаа олох ба үлдсэн элементүүдийн хувьд мөн үйлдлийг 
давтан хийснээр удаах хамгийн их элемент массивийн төгсгөлийн 
өмнөх байрлалыг эзлэн авна.Ийм байдлаар массивийн нийт 
элемент эрэмбэлэгдэж дуустал гүйцэтгэгддэг.Энэ алгоритмыг 
дараах bubbleSort ( ) функцээр үзүүллээ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Template<class Type>void bubbleSort (Type a [ ] , int n) {for ( int 
i=n-1; i>0 ; I--) 
for ( int j=0; j<i ; j ++) 
if (a[ j ] > a [ j+1 ] ) swap (a, j , j+1) ; 
} 
Гадаад давталт i нь массивийн төгсгөлөөс эхлэх ба массивийн 
элементүүд хамгийн их утгаараа эхлэн давталтын алхам бүрт нэг 
нэгээрээ байрлалаа олно.Харин дотоод давталт нь j нь үлдэж 
байгаа элетентүүдийн хувьд буюу i хүртэл массивийн эхлэлээс 
зэргэлдээ элементүүдийг харьцуулна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Тухайн алхамд i-ийн баруун талд орших элементүүд байрлалаа 
олсон байх тул тэдгээрт харьцуулалт хийх шаардлагагүй.Энэ арга 
нь сонгон эрэмбэлэх аргатай төстэй үйлдэл хийх боловч нэг 
элементийн байрлалыг олохын тулд түүнээс илүү үйлдэл хийдэг. 
Дээрх бөмбөлгөн эрэмбэлэлтийн алгоритмд харьцуулалтын тоо 
оролтын өгөгдлөөс үл хамааран ямар ч тохиолдолд 
f(n) = (n-1) + (n-2) + …. + 2 + 1 = (n-1)/2 = O(n2) 
гэж тодорхойлогдоно.Харин солих үйлдэл нь өгөгдлөөс 
хамаарна.Буурахаар эрэмбэлэгдсэн өгөгдлийн хувьд энэ алгоритм 
нь O(n2) солих үйлдэл хийнэ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Бараг эрэмбэлэгдсэн өгөгдлийн хувьд дээрх алгоритмын 
харьцуулалтын тоог багасгах зорилгоор бага зэрэг өөрчлөлт 
оруулья.Өөрчлөлт оруулсан хувилбарыг дараах функцээр 
үзүүллээ. 
Template<class Type> 
Void bubbleSort (Type a [] , iny n ) { 
bool sorted = false ; 
for (int i=n-1; I >o && !sorted ; I ++ ) { 
sorted = true ; 
for (int j = 0 ; j <1 ; j ++) 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
if ( a [j] > a [ j+1 ] ) { 
swap ( a, j, j+1 ) ; 
sorted = false ; 
Энэ функцэд sorted логик хувьсагчийг йшиглан дотоод давталтанд 
гүйцэтгэгдэх өгөгдлүүд эрэмбэлэгдсэн эсэхийг тогтоож 
чадна.Өөрөөр хэлбэл дотоод давталтанд солилцох үйлдэл 
хийгдээгүй тохиолдолд массив аль хэдийн эрэмбэлэгдсэн байх 
бөгөөд эндээс эрэмбэлэлтийн ажиллагааг шууд зогсоож 
болно.Дотоод давталтаар хийгдэх харьцуулалтын тоо нь 
(n-1) + (n-2) + ….+ (n-ksorted ) * (2n – ksorted -1 ) /2 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
ksorted нь эрэмбэлэгдсэн хэсэг массивт тааралдахаас өмнөх гадаад 
давталтбн хийгдэх алхмын тоог илэрхийлнэ.Өөрөөр хэлбэл гадаад 
давталтын !sorted нөхцөл биелэх хүртэл хийгдэх давталтын тоо 
юм. 
Энэ алгоритм нь ksorted нэгтэй тэнцүү буюу өгөгдөл нь 
эрэмбэлэгдсэн үед хамгийн цөөхөн харьцуулалтыг хийнэ. Энэ 
тохиолдолд 
1*(2n-2)/2 = n-1 = O(n) 
Харьцуулалт хийгдэнэ.Харин хамгийн муу тохиолдол буюу нь 
ksorted нь n-1 байхад 
(n-1)n/2 = O/n2 Харьцуулалт хийгдэнэ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Бөмбөлгөн эрэмбэлэлтийн алгоритмыг эрэмбэлэлтийн удаан 
алгоритмуудын нэг хэлж болно. Тухайлбал сонгон эрэмбэлэх 
аргатай харьцуулан зарим дутагдалтай талуудыг харж болох 
юм.Бөмбөлгөн эрэмбэлэлтийн арга нь солих үйлдлийг дотоод 
давталданд хийдэг бол сонгон эрэмбэлэх арга нь дотоод 
давталтанд солих үйлдэл хийдэггүй.Түүнээс гадна элемент зөвхөн 
зэргэлдээ байрлалдаа шилжилт хийдэг бол сонгон илэрхийлэх 
алгоритмд элемент хол шилжилт хийдэг ба энэ байрлал нь түүний 
эцсийн байрлал болдог. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Shell-ийн арга 
Энэ (анх D . L . Shell боловсруулсан) алгоритм нь оруулан 
эрэмбэлэх аргыг элементийн эцсийн байрлалдаа орох шилжилтийг 
хурдасган сайжруулсан. 
Оруулан эрэмбэлэх арга нь харьцуулалтыг өмнөх элементүүдтэй 
дэс дараалан хйиж, шилжилтийг зөвхөн зэргэлдээ байрлалын хувьд 
хийдэг учраас удаан байдаг. Жишээлбэл хамгийн бага элемент 
массивын төгсгөлд байвал N Шилжилт хийсний дараа байрлалаа 
олох боломжтой болно. Тэгвэл shell-ийн арга нь оруулан эрэмбэлэх 
аргыг зайтайгаар хол хол хийдэг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Тухайн алхмын зайг h гэвэл массивын h алхам дахь элемент бүрийн 
хувьд эрэмбэлэлтийг хийх ба массивт биенээсээ үл хамаарах h 
ширхэг эрэмбэлэгдсэн дэд хэсэг үүснэ. Өөрөөр хэлбэл эхний 
эрэмбэлэгдсэн хэсэгт массивын o , h, 2h _ индекстэй элементүүд, 
удаах эрэмбэлэгдсэн хэсэгт 1, h+1, 2h+1 _ индекстэй элементүүд 
хамаарах байдлаар i=0,1,…, h-1 хувьд i, (i+h), (i+2h),… индекстэй 
элементүүдээс тогтох h ширхэг эрэмбэлэгдсэн дэд хэсэг үүснэ. Энэ 
үйлдлийн h- ийн утга нь 1-ээр эхлэх дурын тоонуудын дараалал 
байж болно. Алгоритмын эрэмбэлэлт нь алхмын зай h – ийн авах 
утгуудын дарааллаас маш их хамаардаг. Туршилт болон 
судалгаагаар эрэмбэлэлтийг үр ашигтай болгох h- ийн авах 
утгуудын дарааллаас маш их хамаардаг. Туршилт болон судалгаагар 
эрэмбэлэлтийг үр ашигтай болгох h-ийн нэг дарааллыг 
сонирхцгооё. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
h1=1 гэвэл hs+1=3hs +1гэж тодорхойлогдох ба дараалал h1+2 ≥N 
байх h, утгаар төгсгөнө. Эндээс 1, 4, 13, 40, 121, 364, 1093,… гэсэн 
дараалал үүснэ. 
Эрэмбэлэлтийн shell –ийн алгоритмыг дараах shellSort ( ) 
функцээр тодорхойллоо. 
template <class Type> 
void shellSort (Type a [ ] , int n ) { 
int I , j , h ; Type t ; 
for ( h=1 ; h<=n/9 ; h=h*3+1 ) ; 
for ( ; h>0; h/=3 ) 
for ( i=h ; i<n ; i++ ) { 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
t = a [ I ] ; j = I ; 
While (j >=h && t < a [ j-h ] 
a [ j ] = a [ j-h ] ; 
j -=h ; 
} 
a [ j ] = t ; 
} 
} 
Дээрх функцийн эхний дан давталтаар h буюу N-ийн утганд 
тохирох хамгийн том алхамыг тодорхойлж байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Харин дотоод хоёр давталтаар h алхамаар тодорхойлогдох 
элементүүдийг оруулан эрэмбэлэх аргаар эрэмбэлж байна. 
Shell-ийн алгоритмаар хийгдэх харьцуулалтын тоо N3/2 –аас 
хэтэрдэггүй.Алгоритмын ажиллах дундаж хугацаа O(N1.25 ) ба 
хамгийн муу тохиолдолд O(N1.5 ) байдаг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ

More Related Content

What's hot

алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогуудRenchindorj Monkhzul
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудБаярсайхан Л
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)Badral Khurelbaatar
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритмEnkh Gvnj
 
бие даалт № 1 borland c++
бие даалт № 1 borland c++бие даалт № 1 borland c++
бие даалт № 1 borland c++2011bonus
 
Урвуу матриц
Урвуу матрицУрвуу матриц
Урвуу матрицBolorma Bolor
 
мэдээллийн системийн үндэс
мэдээллийн системийн үндэсмэдээллийн системийн үндэс
мэдээллийн системийн үндэсTsetsenkhuu Otgonbayar
 
U.cs101 алгоритм программчлал-4-zasah
U.cs101   алгоритм программчлал-4-zasahU.cs101   алгоритм программчлал-4-zasah
U.cs101 алгоритм программчлал-4-zasahBadral Khurelbaatar
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7Badral Khurelbaatar
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголтЖавзмаа Ж
 
си хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиси хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиenhsaran_tsahim
 
алгоритмчлалын үндэс
алгоритмчлалын үндэсалгоритмчлалын үндэс
алгоритмчлалын үндэсGombo Tumuruu
 

What's hot (20)

C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1
 
алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогууд
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогууд
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
бие даалт № 1 borland c++
бие даалт № 1 borland c++бие даалт № 1 borland c++
бие даалт № 1 borland c++
 
Html хичээл
Html хичээлHtml хичээл
Html хичээл
 
Урвуу матриц
Урвуу матрицУрвуу матриц
Урвуу матриц
 
U.cs101 lecture 6
U.cs101   lecture 6U.cs101   lecture 6
U.cs101 lecture 6
 
мэдээллийн системийн үндэс
мэдээллийн системийн үндэсмэдээллийн системийн үндэс
мэдээллийн системийн үндэс
 
Lection 5
Lection 5Lection 5
Lection 5
 
U.cs101 алгоритм программчлал-4-zasah
U.cs101   алгоритм программчлал-4-zasahU.cs101   алгоритм программчлал-4-zasah
U.cs101 алгоритм программчлал-4-zasah
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголт
 
си хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиси хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р анги
 
Лекц №12
Лекц №12Лекц №12
Лекц №12
 
C++
C++C++
C++
 
2
22
2
 
алгоритмчлалын үндэс
алгоритмчлалын үндэсалгоритмчлалын үндэс
алгоритмчлалын үндэс
 
алгоритм 8
алгоритм 8алгоритм 8
алгоритм 8
 

Similar to U.cs101 алгоритм программчлал-13

U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15Badral Khurelbaatar
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-5
U.cs101   алгоритм программчлал-5U.cs101   алгоритм программчлал-5
U.cs101 алгоритм программчлал-5Badral Khurelbaatar
 
Алгоритм
АлгоритмАлгоритм
Алгоритмswf_cloud
 
Mathcad beginning-appendix
Mathcad beginning-appendixMathcad beginning-appendix
Mathcad beginning-appendixBabaa Naya
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9 Badral Khurelbaatar
 
Algoritm
AlgoritmAlgoritm
Algoritmshulam
 
Excel ийн функцийн сан
Excel ийн функцийн санExcel ийн функцийн сан
Excel ийн функцийн санSkhaan Battulga
 

Similar to U.cs101 алгоритм программчлал-13 (20)

U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
U.cs101 lection-8
U.cs101  lection-8 U.cs101  lection-8
U.cs101 lection-8
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
Pp Lect10 11
Pp Lect10 11Pp Lect10 11
Pp Lect10 11
 
Bvleg 6 recursion
Bvleg 6 recursionBvleg 6 recursion
Bvleg 6 recursion
 
U.cs101 алгоритм программчлал-5
U.cs101   алгоритм программчлал-5U.cs101   алгоритм программчлал-5
U.cs101 алгоритм программчлал-5
 
Pp Lect9 10 1
Pp Lect9 10 1Pp Lect9 10 1
Pp Lect9 10 1
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
Mathcad beginning-appendix
Mathcad beginning-appendixMathcad beginning-appendix
Mathcad beginning-appendix
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9
 
Algoritm
AlgoritmAlgoritm
Algoritm
 
Excel ийн функцийн сан
Excel ийн функцийн санExcel ийн функцийн сан
Excel ийн функцийн сан
 
Бие даалт
Бие даалтБие даалт
Бие даалт
 
Өгөгдлийн бүтэц 1
Өгөгдлийн бүтэц 1Өгөгдлийн бүтэц 1
Өгөгдлийн бүтэц 1
 
Presentation1
Presentation1Presentation1
Presentation1
 

U.cs101 алгоритм программчлал-13

  • 1. ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ, Е-НЭЭЛТТЭЙ ИНСТИТУТ Эрэмбэлэх алгоритм Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ www.emust.edu.mn Лекц – 13
  • 2. Агуулга: 01 Эрэмбэлэлтийн тухай Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ www.emust.edu.mn 01 02 02 Сонгон эрэмбэлэх арга 03 Оруулан эрэмбэлэх арга 04 Бөмбөлөгөн эрэмбэлэх арга
  • 3. Судлах зүйл: Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 4. Эрэмбэлэлтийн тухай Программын тооцоолох ажилд нөлөөлөх нэг үндсэн үйлдэл бол эрэмбэлэлт юм.Эрэмбэлэлт нь өгөгдлүүдийг тодорхой дарааллаар тухайлбал, өсөхөөр эсвэл буурахаар зохион байгуулах үйлдэл юм. Жишээлбэл: а1 , а2 , … аn өгөгдлийг өсөхөөр эрэмбэлэгдсэн гэвэл : а1 ≤, а2 , ≤… ≤аn нөхцөлийг хангах болно. Эрэмбэлэгдсэн өгөгдөл нь хайлтийг хурдасгах чухал ач холбогдолтой.Хэрэв өгөгдөлүүд нь эмбэлэгдээгүй бол бид хүссэн өгөгдөлөө авахын тулд өгөгдлийг эхнээс нь дараалан хайхаас өөр аргагүй. Харин өгөдөл нь эрэмбэлэгдсэнээр түүнд хийх хайлтыг хурдасгах зарим алгоритмийг тодорхойлж болдог. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 5. Эрэмбэлэлтийн алгоритмуудыг судлах эхний хэсэгт бид эрэмбэлэлтийн энгийн аргуудтай танилцах юм.Эрэмбэлэлт нь хийхэд энгийн аргуудыг сонгох зарим хэрэглээ ба шаардлага байдаг.Ер нь эрэмбэлэх үйлдэл нь программын ажлын явцад зөвхөн ганц удаа (эсвэл цөөхөн) хийгддэг.Хэрэв эрэмбэлэх өгөгдлийн тоо нь асар олон биш бол энгийн эрэмбэлэлтийн аргууд нь илүү үр ашигтай байхаас гадна нэвтрүүлэлт болон шалгалт хийхэд хялбар байдаг. Энгийн аргууд цөөхөн өгөгдлийн хувьд ямагт тохиромжтой байдаг.Өгөгдлийн өөр нэг өгөгдөх хэлбэр бол өгөгдлүүд нь бараг эрэмбэлэгдсэн (аль эсвэл аль хэдийн эрэмбэлэгдсэн) эсвэл маш олон тооны тэнцүү өгөгдлүүд (түлхүүр талбарын өгөгдөл) агуулсан байж болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 6. Эрэмбэлэгдэх өгөгдөл нь хэд хэдэн талбаруудаас тогтох бичлэгүүд байж болох ба энэ тохиолдолд эрэмбэлэлтийг аль нэг талбарын утгаар хийдэг. Энэ талбарыг түлхүүр гэж нэрлэдэг. Энд эрэмбэлэлтийн алгоритмуудын программыг ойлгомжтой, хялбархан болгох зорилгоор бүхэл тоо, тэмдэгт зэрэг энгийн өгөгдлийн төрөлтэй массивийн хувьд эрэмбэлэлтийг гүйцэтгэхээр тодорхойлж өгсөн. Хэрэв эрэмбэлэгдэх нийт өгөгдөл нь санах ойд хүрэлцэхүйц бага хэмжээтэй бол дотоод эрэмбэлэлт гэнэ. Эрэмбэлэлтын аргуудыг харьцуулах гол хэмжүүр бол тэдгээрийн ажиллах хугацаа юм. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 7. Эрэмбэлэлтийн алгоритмын түлхүүр үйлдэл нь харьцуулах ба утга солилцох гэсэн үндсэн үйлдлээр тодорхойлогддог. Гэвч эрэмбэлэлтийн алгоритмын хувьд харьцуулалтын тоог илүү сонирхдог.Алгоритмын ажиллах хугацааг хамгийн муу ба дундаж гэсэн хоёр тохиолдлын хувьд хэлэлцдэг.Бид N өгөгдлийн хувьд ажиллах хугацаа нь N2 шаардах алгоритмаас эхлээд N шаардах алгоритмуудыг үзэх болно. Эрэмбэлэлтийн алгоритмын өөр нэг хэмжүүр бол шаардагдах нэмэлт санах ойн хэмжээ юм.Зарим алгоритм (шаардагдах маш бага зайг үл тооцвол) нэмэлт зай ашигладаггүй байхад зарим нь N өгөгдлийг давхар хадгалах нэмэлт зайг шаардаж байдаг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 8. Сонгон эрэмбэлэх арга Эрэмбэлэлтийн эхний энгийн алгоритмаар сонгон эрэмбэлэх аргыг авч үзье. Энэ арга нь массив дахь хамгийн бага элементийг олж массивын эхний элементтэй сольж, дараа нь удаах бага элементийг олж массивын хоёр дахь элементтэй солих байдлаар массивын бүх элемент эрэмбэлэгдэж дуустал гүйцэтгэх арга юм, Энэ арга нь үлдэж байгаа хэсэг бүрээс хамгийн бага элемтентийг сонгож байгаа учир сонгон эрэмбэлэх арга гэж нэрлэсэн. Сонгон эрэмбэлэх алгоритмыг дараал selectionSort () функцээр тодорхойллоо. template<class Type> void selectionSort(Type a[], int n) ( int i, j, min; Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 9. 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 ) ; Selection ( ) функцийг мөн загвар функцээр тодорхойллоо. i байрлалд түүнээс орших элементүүдийн хамгийн бага элемент орно. J индекс тусламжтайгаар I дүгээр байрлалаас хойшх элементүүдээс хамгийн бага элементүүдыг олж өмнөх хэсэгт тодорхойлсон swap () функцийг ашиглан функцуудыг сольж байна.Гадаад давталт буюу i индексийн давталт дуусахад массив бүрэн эрэмбэлэгдсэн байх болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 10. selectionSort ( ) функц нь нэгэнт загвар функцээр тодорхойлогдсон болохоор бид ямарч өгөгдлийн төрөл бүхий массивийг энэн функцэд дамжуулан эрэмбэлж чадна.Жишээлбэл int ба char төрөлтэй массивуудыг дээрх функцэд хэрхэн дамжуулахыг харцгаая. int a [ 8 ] = { 77, 33, 44, 11, 88, 22, 66, 55 } ; char s [ 15 ] = {‘a’ , ‘b’, ‘o’ , ‘r’, ‘t’, ‘n’ , ‘g’, ‘e’, ‘x’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’} ; selectionSort ( a, 8) ; selectionSort ( s, 15) ; Эрэмбэлэлтийн энэ энгийн арга нь маш цөөхөн өгөгдөлтэй массивийн хувьд сайн ажилладаг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 11. Сонгон эрэмбэлэх алгоритм нь өгөгдлийн анх өгөгдөх дарааллаас үл хамааран ойролцоогоор n2 харьцуулалт, n солилцох үйлдэл хийдэг.Дээрх алгоритмаас ажиглавал i гадаад давталтын алхам бүрт нэг солоилт ба n-1 харьцуулалт хийж байна. Иймээс нийт харьцуулалтын тообуюу алгоритмын ажиллах хугацааг илэрхийлэх £ ( n ) функцийн утга нь £ ( n ) = (n-1) + (n-2) +….+ 2 + 1 = n(n-1)/2 = O (n2) гэж тодорхойлогдоно. Иймд NM хэмжээтэй нийт өгөгдлийн эрэмбэлэгдэхэд N2харьцуулалт ба NM солилцох үйлдэл хийнэ.Хэрэв N=O(M) бол эрэмбэлэлтийн бүхэл өгөгдлийн хувьд шугаман гэж хэлж болох юм. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 12. Оруулан эрэмбэлэх арга Оруулан эрэмбэлэх алгоритм нь сонгон эрэмбэлэлтийн алгоритмуудын нэг бөгөөд магадгүй илүү уян хатан , үр ашигтай байж болно.Энэ аргын үндсэн элемент нь эрэмбэлэгдсэн массивт эрэмбэлэлтийг алдагдуулахгүйгээр шинээр элемент охуулах үйлдлээр тодорхойлогддог.Өөрөөр хэлбэл эрэмбэлэгдсэн элементүүдийн шинэ элементээс их элементүүдын нэг байрлал баруунтийм шилжүүлэх байдлаар орвол зохих байрлалыг чөлөөлж өгдөг.Оруулан эрэмбэлэх алгоритмыг дараах InsertionSort ( ) функцээр үзүүллээ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 13. template<class Type> void insertitionSort (Type a [ ] , int I , int n ) { for (int I = 1 ; I < n; I ++) { Type element = a [ I ] ; Int j = I – 1 ; While ( j >= 0 && element < a [ j ] ) a [ j+1 ] = a [ j] ; a [ j+1 ] = element ; } } Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 14. Шинээр оруулах элементийг гадаад давталт I –гээр массивийн хоёр дахь элементээс эхлэн авна.Эхний алхамд хамгийн эхний элементтэй харьцуулан байрлалыг нь олсноор хоёр элементтэй эрэмбэлэгдсэн массив гарган авна.Удаах алхамд, үүсгэсэн хоёр элемент бүхий эрэмбэлэгдсэн массивтаа массивийн гурав дахь элементийг оруулах байдлаар массивийн төгсгөл хүртэл бүх элементийн хувьд давтан гүйцэтгэнэ. Дээрх алгоритмын while дотоод давталтаар шинэ элементийг эрэмбэлэгдсэн гэх түүний өмнөх элементүүдээс тогтох массивийн хэсэгт оруулж өгөх үйлдэл хийгдэнэ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 15. Энэ давталт нь шинэ элементээс бага элемент тааралдтал хийгдэх ба харин их элементүүд нь хойшоо (баруун тийш) нэг шилжсэн шинэ элементэд зай гаргах болно.Хэрэв шинэ элемент өмнөх бүх элементүүдээс бага байх тохиолдолд j индекс багассаар массивийн хэмжээнээс (тэгээд бага болох ) өнгөрч болох юм.Энэ алдааг зохицуулах зорилгоор while давталтанд j>=0 гэсэн нөхцөлийг давхар оруулж өгсөн.Гэвч энэ нөхцөл нь j –ийн утга тэгээс бага болоогүй тохиолдолд бүрт илүүдэл шалгалтыг гүйцэтгэж байна. Энэ илүүдэл шалгалтаас зайлсхийх нэг арга бол масствийн эхний элементэд хязгааргүй бага (массивийн элементүүдээс харьцангуй бага) утга олнон ашигладаг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 16. Эхний энэ элементийг харуул элемент гэж нэрлэдэг.Ингэснээр массивийн эхний элементийг массивийн үндсэн элементээр авахгүй бөгөөд дотоод давталтыг while ( element <a[ j ] ) гэж гүйцэтгэнэ.Гэвч ихэнх тохиолдолд массивийн элементүүдийн утгын доод хязгаарыг урьдчилан тодорхойлох боломжгүй байдгаас харуул элементийн утгыг тогтооход хүндрэлтэй байдаг. Оруулан эрэмбэлэх алгоритмын харьцуулалтын тоо f ( n ) функцийг өмнөх аргын адил хялбархан тодорхойлж болно.Эхлээд хамгийн муу тохиолдол болох буурахаар эрэмбэлэгдсэн өгөгдлийн үед авч үзье. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 17. Энэ тохиолдолд массивийн k дахь элемент бүрийн хувьд дотоод давталтын хамгийн их k-1 харьцуулалтыг гүйцэтгэнэ.Эндээс f(n) = 1 + 2 + 3 + … + (n-1) / 2 O(n2) гэж тодорхойлогдох ба харьцуулалтын тооноос хоёр дахин бага солилцох үйлдэл хийгдэнэ.Учир нь оруулан эрэмбэлэх аргын элементийн шилжилтийг солилцох үйлдлийн хагастай адил гэж үзэж болох юм. Харин дундаж тохиолдолд дотоод давталт нь (k-1) /2 харьцуулалт хийдэг гэвэл f(n) = ½ + 2/2 + 3/2 + …+ (n-1) /2 = n(n-1) / 4 = O(n2) гэж тодорхойлогдоно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 18. Оруулан эрэмбэлэх алгоритм нь “бараг эрэмбэлэгдсэн” өгөгдөлд шугаман ажилладаг.Энэ үед элементүүд нь нэн даруй байрлалдаа олох буюу дотоод давталтаар хамгийн ихдээ 1-ээс 2 удаа харьцуулалт хийгдэнэ.Иймд N харьцуулалтаар эрэмбэлэх болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 19. Бөмбөлөгөн эрэмбэлэлтийн арга Энд бид эрэмбэлэлтийн энгийн аргуудын нэг бөмбөлгөн эрэмбэлэлтийн алгоритмтай танилцах болно.Энэ арга нь массивийн зэргэлдээ элементүүдийг хойш шилжүүлэн массивийн төгсгөлд байрлуулдаг.Ингэснээр хамгийн их элемент эцсийн байрлалаа олох ба үлдсэн элементүүдийн хувьд мөн үйлдлийг давтан хийснээр удаах хамгийн их элемент массивийн төгсгөлийн өмнөх байрлалыг эзлэн авна.Ийм байдлаар массивийн нийт элемент эрэмбэлэгдэж дуустал гүйцэтгэгддэг.Энэ алгоритмыг дараах bubbleSort ( ) функцээр үзүүллээ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 20. Template<class Type>void bubbleSort (Type a [ ] , int n) {for ( int i=n-1; i>0 ; I--) for ( int j=0; j<i ; j ++) if (a[ j ] > a [ j+1 ] ) swap (a, j , j+1) ; } Гадаад давталт i нь массивийн төгсгөлөөс эхлэх ба массивийн элементүүд хамгийн их утгаараа эхлэн давталтын алхам бүрт нэг нэгээрээ байрлалаа олно.Харин дотоод давталт нь j нь үлдэж байгаа элетентүүдийн хувьд буюу i хүртэл массивийн эхлэлээс зэргэлдээ элементүүдийг харьцуулна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 21. Тухайн алхамд i-ийн баруун талд орших элементүүд байрлалаа олсон байх тул тэдгээрт харьцуулалт хийх шаардлагагүй.Энэ арга нь сонгон эрэмбэлэх аргатай төстэй үйлдэл хийх боловч нэг элементийн байрлалыг олохын тулд түүнээс илүү үйлдэл хийдэг. Дээрх бөмбөлгөн эрэмбэлэлтийн алгоритмд харьцуулалтын тоо оролтын өгөгдлөөс үл хамааран ямар ч тохиолдолд f(n) = (n-1) + (n-2) + …. + 2 + 1 = (n-1)/2 = O(n2) гэж тодорхойлогдоно.Харин солих үйлдэл нь өгөгдлөөс хамаарна.Буурахаар эрэмбэлэгдсэн өгөгдлийн хувьд энэ алгоритм нь O(n2) солих үйлдэл хийнэ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 22. Бараг эрэмбэлэгдсэн өгөгдлийн хувьд дээрх алгоритмын харьцуулалтын тоог багасгах зорилгоор бага зэрэг өөрчлөлт оруулья.Өөрчлөлт оруулсан хувилбарыг дараах функцээр үзүүллээ. Template<class Type> Void bubbleSort (Type a [] , iny n ) { bool sorted = false ; for (int i=n-1; I >o && !sorted ; I ++ ) { sorted = true ; for (int j = 0 ; j <1 ; j ++) Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 23. if ( a [j] > a [ j+1 ] ) { swap ( a, j, j+1 ) ; sorted = false ; Энэ функцэд sorted логик хувьсагчийг йшиглан дотоод давталтанд гүйцэтгэгдэх өгөгдлүүд эрэмбэлэгдсэн эсэхийг тогтоож чадна.Өөрөөр хэлбэл дотоод давталтанд солилцох үйлдэл хийгдээгүй тохиолдолд массив аль хэдийн эрэмбэлэгдсэн байх бөгөөд эндээс эрэмбэлэлтийн ажиллагааг шууд зогсоож болно.Дотоод давталтаар хийгдэх харьцуулалтын тоо нь (n-1) + (n-2) + ….+ (n-ksorted ) * (2n – ksorted -1 ) /2 Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 24. ksorted нь эрэмбэлэгдсэн хэсэг массивт тааралдахаас өмнөх гадаад давталтбн хийгдэх алхмын тоог илэрхийлнэ.Өөрөөр хэлбэл гадаад давталтын !sorted нөхцөл биелэх хүртэл хийгдэх давталтын тоо юм. Энэ алгоритм нь ksorted нэгтэй тэнцүү буюу өгөгдөл нь эрэмбэлэгдсэн үед хамгийн цөөхөн харьцуулалтыг хийнэ. Энэ тохиолдолд 1*(2n-2)/2 = n-1 = O(n) Харьцуулалт хийгдэнэ.Харин хамгийн муу тохиолдол буюу нь ksorted нь n-1 байхад (n-1)n/2 = O/n2 Харьцуулалт хийгдэнэ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 25. Бөмбөлгөн эрэмбэлэлтийн алгоритмыг эрэмбэлэлтийн удаан алгоритмуудын нэг хэлж болно. Тухайлбал сонгон эрэмбэлэх аргатай харьцуулан зарим дутагдалтай талуудыг харж болох юм.Бөмбөлгөн эрэмбэлэлтийн арга нь солих үйлдлийг дотоод давталданд хийдэг бол сонгон эрэмбэлэх арга нь дотоод давталтанд солих үйлдэл хийдэггүй.Түүнээс гадна элемент зөвхөн зэргэлдээ байрлалдаа шилжилт хийдэг бол сонгон илэрхийлэх алгоритмд элемент хол шилжилт хийдэг ба энэ байрлал нь түүний эцсийн байрлал болдог. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 26. Shell-ийн арга Энэ (анх D . L . Shell боловсруулсан) алгоритм нь оруулан эрэмбэлэх аргыг элементийн эцсийн байрлалдаа орох шилжилтийг хурдасган сайжруулсан. Оруулан эрэмбэлэх арга нь харьцуулалтыг өмнөх элементүүдтэй дэс дараалан хйиж, шилжилтийг зөвхөн зэргэлдээ байрлалын хувьд хийдэг учраас удаан байдаг. Жишээлбэл хамгийн бага элемент массивын төгсгөлд байвал N Шилжилт хийсний дараа байрлалаа олох боломжтой болно. Тэгвэл shell-ийн арга нь оруулан эрэмбэлэх аргыг зайтайгаар хол хол хийдэг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 27. Тухайн алхмын зайг h гэвэл массивын h алхам дахь элемент бүрийн хувьд эрэмбэлэлтийг хийх ба массивт биенээсээ үл хамаарах h ширхэг эрэмбэлэгдсэн дэд хэсэг үүснэ. Өөрөөр хэлбэл эхний эрэмбэлэгдсэн хэсэгт массивын o , h, 2h _ индекстэй элементүүд, удаах эрэмбэлэгдсэн хэсэгт 1, h+1, 2h+1 _ индекстэй элементүүд хамаарах байдлаар i=0,1,…, h-1 хувьд i, (i+h), (i+2h),… индекстэй элементүүдээс тогтох h ширхэг эрэмбэлэгдсэн дэд хэсэг үүснэ. Энэ үйлдлийн h- ийн утга нь 1-ээр эхлэх дурын тоонуудын дараалал байж болно. Алгоритмын эрэмбэлэлт нь алхмын зай h – ийн авах утгуудын дарааллаас маш их хамаардаг. Туршилт болон судалгаагаар эрэмбэлэлтийг үр ашигтай болгох h- ийн авах утгуудын дарааллаас маш их хамаардаг. Туршилт болон судалгаагар эрэмбэлэлтийг үр ашигтай болгох h-ийн нэг дарааллыг сонирхцгооё. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 28. h1=1 гэвэл hs+1=3hs +1гэж тодорхойлогдох ба дараалал h1+2 ≥N байх h, утгаар төгсгөнө. Эндээс 1, 4, 13, 40, 121, 364, 1093,… гэсэн дараалал үүснэ. Эрэмбэлэлтийн shell –ийн алгоритмыг дараах shellSort ( ) функцээр тодорхойллоо. template <class Type> void shellSort (Type a [ ] , int n ) { int I , j , h ; Type t ; for ( h=1 ; h<=n/9 ; h=h*3+1 ) ; for ( ; h>0; h/=3 ) for ( i=h ; i<n ; i++ ) { Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 29. t = a [ I ] ; j = I ; While (j >=h && t < a [ j-h ] a [ j ] = a [ j-h ] ; j -=h ; } a [ j ] = t ; } } Дээрх функцийн эхний дан давталтаар h буюу N-ийн утганд тохирох хамгийн том алхамыг тодорхойлж байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 30. Харин дотоод хоёр давталтаар h алхамаар тодорхойлогдох элементүүдийг оруулан эрэмбэлэх аргаар эрэмбэлж байна. Shell-ийн алгоритмаар хийгдэх харьцуулалтын тоо N3/2 –аас хэтэрдэггүй.Алгоритмын ажиллах дундаж хугацаа O(N1.25 ) ба хамгийн муу тохиолдолд O(N1.5 ) байдаг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ

Editor's Notes

  1. Cover 1