Шумораи хеле зиёди алгоритмҳои ҷудокунӣ мавҷуданд, ки аксари онҳо хеле мушаххасанд ва барои ҳалли доираи танги масъалаҳо ва кор бо намудҳои мушаххаси додаҳо таҳия шудаанд. Аммо дар байни ин гуногунрангӣ, соддатарин алгоритми сазовори навъҳои ҳубобӣ мебошад, ки онро бо ҳар забони барномасозӣ амалӣ кардан мумкин аст. Сарфи назар аз содда будани он, он дар асоси бисёр алгоритмҳои хеле мураккаб ҷойгир аст. Бартарии дигари муҳими он соддагии он аст ва аз ин рӯ, онро метавон фавран дар хотир дошт ва бидуни ҳеҷ гуна адабиёти иловагӣ дар пеши шумо амалӣ созед.
Баръакси барномаи компютерӣ, ҷудокунӣ барои шумо душвор нахоҳад буд, зеро шумо метавонед тамоми тасвирро бубинед ва фавран фаҳмед, ки кадом қаҳрамон бояд ба куҷо кӯчонида шавад, то бомуваффақият ба анҷом расад. Эҳтимол шумо аллакай тахмин кардаед, ки барои ҷудо кардани ин сохтори додаҳо бо тартиби афзоиш, танҳо ҷойҳои Hulk ва Iron Man иваз кунед:
то андозае аблаҳ аст ва тамоми сохтори маълумотро дар маҷмӯъ намебинад. Барномаи назоратии он метавонад дар як вақт танҳо ду арзишро муқоиса кунад. Барои халли ин масъала ба вай лозим меояд, ки ду ададро дар хотираи худ чойгир карда, бо онхо амалиёти мукоисавй анчом дихад ва баъд ба як чуфт ракамхои дигар гузарад ва то даме ки хамаи маълумотхо тахлил карда шаванд. Аз ин рӯ, ҳар як алгоритми ҷудокунӣ метавонад дар шакли се марҳила хеле содда карда шавад:
Пас аз он ки шумо тамоми рӯйхатро дар як гузариш бо чунин алгоритм мегузаред, ҷудокунӣ пурра анҷом намеёбад. Аммо аз тарафи дигар, бузургтарин унсури рӯйхат ба мавқеи рости дур интиқол дода мешавад. Ин ҳамеша рӯй медиҳад, зеро вақте ки шумо элементи калонтаринро пайдо мекунед, шумо ҳамеша ҷойҳоро иваз мекунед, то он даме, ки онро ба охир расонед. Яъне, вақте ки барнома Ҳулкро дар массив "пайдо мекунад", вай ӯро ба охири рӯйхат мебарад:
Аз ин рӯ, ин алгоритмро навъбандии ҳубобӣ меноманд, зеро дар натиҷаи кори он бузургтарин элементи рӯйхат дар қисми болоии массив ҷойгир мешавад ва ҳамаи элементҳои хурдтар як мавқеъ ба тарафи чап кӯчонида мешаванд:
Барои анҷом додани навъбандӣ, ба шумо лозим меояд, ки ба аввали массив баргардед ва панҷ қадами дар боло тавсифшударо бори дигар такрор кунед, боз аз чап ба рост ҳаракат кунед, унсурҳоро дар ҳолати зарурӣ муқоиса ва ҳаракат кунед. Аммо ин дафъа ба шумо лозим аст, ки алгоритмро як элемент пеш аз анҷоми массив қатъ кунед, зеро мо аллакай медонем, ки элементи калонтарин (Hulk) комилан дар мавқеи росттарин қарор дорад:
Пас, барнома бояд ду ҳалқа дошта бошад. Барои возеҳи бештар, пеш аз он ки мо ба баррасии codeи барнома гузарем, шумо метавонед дар ин истино визуалии кор кардани навъбандии ҳубобро бубинед: Визуалии он ки чӣ тавр навъбандии ҳубобӣ кор мекунад
IntelliJ дӯстдоштаи худ зеркашӣ кунед . Он дар зер таҳлил карда мешавад:
Ба суръати алгоритм на танҳо аз шумораи гузаришҳо, балки шумораи ивазкунӣ, ки бояд анҷом дода шаванд, таъсир мерасонад. Барои маълумоти тасодуфӣ, шумораи ивазкунӣ ба ҳисоби миёна (N ^ 2) / 4 аст, ки тақрибан нисфи шумораи гузаришҳоро ташкил медиҳад. Аммо, дар бадтарин ҳолат, шумораи ивазкунӣ низ метавонад N ^ 2 / 2 бошад - ин ҳолат аст, агар маълумот дар аввал бо тартиби баръакс мураттаб карда шавад. Сарфи назар аз он, ки ин як алгоритми ҷудокунии хеле суст аст, донистан ва фаҳмидани он ки чӣ тавр кор мекунад, хеле муҳим аст ва тавре ки дар боло зикр гардид, он барои алгоритмҳои мураккабтар асос аст. Jgd!
Муқаддима
Тамоми Интернети муосир аз шумораи зиёди намудҳои гуногуни сохторҳои додаҳо, ки дар пойгоҳи додаҳо ҷамъ оварда шудаанд, иборат аст. Онҳо ҳама гуна маълумотро аз маълумоти шахсии корбарон то ядрои семантикии системаҳои автоматикунонидашудаи хеле зеҳнӣ нигоҳ медоранд. Бояд гуфт, ки ҷудокунии додаҳо дар ин миқдори зиёди иттилооти сохторӣ нақши бениҳоят муҳим мебозад. Мураттабкунӣ метавонад як қадами ҳатмӣ пеш аз ҷустуҷӯи ҳама гуна маълумот дар базаи маълумот бошад ва дониши алгоритмҳои ҷудокунӣ дар барномасозӣ нақши хеле муҳимро мебозад.Аз рӯи чашмони мошин ва чашмони инсон ҷудокунӣ
Биёед тасаввур кунем, ки ба шумо лозим аст, ки 5 сутуни баландии гуногунро бо тартиби афзоиш ҷудо кунед. Ин сутунҳо метавонанд ҳар гуна маълумотро дошта бошанд (нархҳои саҳҳомӣ, фарохмаҷрои канали алоқа ва ғ.); шумо метавонед баъзе versionҳои шахсии ин вазифаро пешниҳод кунед, то он равшантар шавад. Хуб, ҳамчун намуна, мо Интиқомгирандагонро аз рӯи баландӣ ҷудо мекунем:Иҷро шуд!
Ва ин навъбандиро бомуваффақият анҷом медиҳад. Аммо, компютер, бар хилофи шумо,- Ду элементро муқоиса кунед;
- Яке аз онҳоро иваз кунед ё нусхабардорӣ кунед;
- Ба унсури навбатӣ гузаред;
Алгоритми ҷудокунии ҳубобӣ
Ҷудобандии ҳубобӣ соддатарин ҳисобида мешавад, аммо пеш аз тавсифи ин алгоритм, биёед тасаввур кунем, ки чӣ гуна шумо интиқомгирандагонро аз рӯи баландӣ ҷудо мекунед, агар шумо метавонистед, ба мисли мошин, танҳо ду қаҳрамонро дар як вақт бо ҳамдигар муқоиса кунед. Эҳтимол, шумо амалҳои зеринро анҷом медиҳед (беҳтаринаш):- Шумо ба элементи сифри массиви мо мегузаред (Беваи сиёҳ);
- Унсури сифрро (Беваи сиёҳ) бо якум (Ҳулк) муқоиса кунед;
- Агар элемент дар мавқеи сифр баландтар бошад, шумо онҳоро иваз мекунед;
- Дар акси ҳол, агар элемент дар мавқеи сифр хурдтар бошад, шумо онҳоро дар ҷойҳои худ мегузоред;
- Ба мавқеъ ба тарафи рост ҳаракат кунед ва муқоисаро такрор кунед (Ҳулкро бо капитан муқоиса кунед)
Амалисозии навъбандии ҳубобӣ дар Java
Барои нишон додани он ки чӣ тавр ҷудокунӣ дар Java кор мекунад, ин рамзи барнома аст:- массиви 5 элементро месозад;
- болоравии интиқомгирандагонро ба он бор мекунад;
- мундариҷаи массивро нишон медиҳад;
- навъбандии ҳубобро амалӣ мекунад;
- массиви мураттабшударо аз нав намоиш медихад.
class ArrayBubble{
private long[] a; // array reference
private int elems; //number of elements in the array
public ArrayBubble(int max){ //class constructor
a = new long[max]; //create an array with size max
elems = 0; //when created, the array contains 0 elements
}
public void into(long value){ // method for inserting an element into an array
a[elems] = value; //insert value into array a
elems++; //array size increases
}
public void printer(){ // method for outputting an array to the console
for (int i = 0; i < elems; i++){ //for each element in the array
System.out.print(a[i] + " "); // output to console
System.out.println(""); //a new line
}
System.out.println("----End array output----");
}
private void toSwap(int first, int second){ //method swaps a pair of array numbers
long dummy = a[first]; // put the first element into a temporary variable
a[first] = a[second]; // put the second element in place of the first
a[second] = dummy; //instead of the second element, write the first from temporary memory
}
public void bubbleSorter(){ //МЕТОД ПУЗЫРЬКОВОЙ СОРТИРОВКИ
for (int out = elems - 1; out >= 1; out--){ //Outer loop
for (int in = 0; in < out; in++){ //Inner loop
if(a[in] > a[in + 1]) //If the order of the elements is wrong
toSwap(in, in + 1); // call the swapping method
}
}
}
}
public class Main {
public static void main(String[] args) {
ArrayBubble array = new ArrayBubble(5); //Create array array with 5 elements
array.into(163); //fill the array
array.into(300);
array.into(184);
array.into(191);
array.into(174);
array.printer(); //display elements before sorting
array.bubbleSorter(); //ИСПОЛЬЗУЕМ ПУЗЫРЬКОВУЮ СОРТИРОВКУ
array.printer(); // print the sorted list again
}
}
Сарфи назар аз шарҳҳои муфассал дар code, мо тавсифи баъзе усулҳои дар барнома пешниҳодшударо пешниҳод мекунем. Усулҳои асосӣ, ки кори асосиро дар барнома иҷро мекунанд, дар синфи ArrayBubble навишта шудаанд. Синф конструктор ва якчанд усулҳоро дар бар мегирад:
into
– усули ворид кардани элементҳо ба массив;printer
– мундариҷаи массивро сатр ба сатр нишон медиҳад;-
toSwap
- агар лозим бошад, элементҳоро аз нав танзим мекунад. Барои ин таѓйирёбандаи муваќќатї истифода мешавадdummy
, ки ба он ќимати адади аввал навишта мешавад ва ба љои адади аввал ќимати адади дуюм навишта мешавад. Пас аз он мундариҷаи тағирёбандаи муваққатӣ ба рақами дуюм навишта мешавад. Ин як усули стандартӣ барои иваз кардани ду элемент аст;ва ниҳоят усули асосӣ:
-
bubbleSorter
- ки кори асосиро иҷро мекунад ва маълумоти дар массив нигоҳ дошташударо ба навъҳо ҷудо мекунад, мо онро бори дигар алоҳида пешниҳод мекунем:public void bubbleSorter(){ //МЕТОД ПУЗЫРЬКОВОЙ СОРТИРОВКИ for (int out = elems - 1; out >= 1; out--){ //Outer loop for (int in = 0; in < out; in++){ //Inner loop if(a[in] > a[in + 1]) //If the order of the elements is wrong toSwap(in, in + 1); // call the swapping method } } }
out
ва дохилӣ in
. Ҳисобкунаки берунаout
ба шумориши арзишҳо аз охири массив оғоз мекунад ва бо ҳар як гузариш тадриҷан як маротиба кам мешавад. out
Бо ҳар як гузариш нав, тағирёбанда ба тарафи чап ҳаракат карда мешавад, то ба арзишҳои аллакай дар тарафи рости массив мураттабшуда таъсир нарасонад. Ҳисобкунаки дохилӣin
ба шумориши арзишҳо аз аввали массив оғоз мекунад ва дар ҳар як гузариш тадриҷан як маротиба зиёд мешавад. Афзоиш in
то расидани он out
(элементи охирини таҳлилшуда дар гузариш ҷорӣ) рух медиҳад. Давраи дохилӣ in
ду ҳуҷайраи ҳамсояро муқоиса мекунад in
ва in+1
. Агар in
адади калонтар аз in+1
, нигоҳ дошта шавад, он гоҳ усул номида мешавад toSwap
, ки ҷойҳои ин ду ададро иваз мекунад.
GO TO FULL VERSION