Bubble Sort

Sorting ထဲမွာ အ႐ိုးအရွင္းဆံုး နည္းလမ္းပါပဲ။ ကၽြန္ေတာတို႔မွာ

[9,1,8,6,7,4]

ဆိုတဲ့ array ရွိတယ္။ အဲဒါကို sorting စီ လိုက္ရင္

[1,4,6,7,8,9]

ဆိုၿပီး ရမယ္။ ပံုမွန္ ကၽြန္ေတာ္တို႔ sorting ဘယ္လို စီသြားသလဲ ဆိုတာကို ၾကည့္ရေအာင္။

အရင္ဆံုး ပထမ ဆံုး အခန္းကို ၾကည့္တယ္။ ဒုတိယ အခန္း နဲ႔ စစ္မယ္။ 9 ႏွင့္ 1 ႏွစ္ခု ကို ယွဥ္မယ္။ 9 က 1 ထက္ ႀကီးမလား စစ္မယ္။ မႀကီးဘူးဆိုရင္ ဒီ အတိုင္းထားမယ္။ ႀကီးရင္ ေနရာလဲမယ္။ အဲလိုနဲ႔ ေရွ႕အခန္း ေနာက္အခန္း ႀကီးသလား ဆိုၿပီး အခန္း ကုန္သြားသည့္ အထိ စစ္သြားမယ္။

ဒါဆိုရင္ ေအာက္ကလို မ်ဳိး တဆင့္ ျခင္းစီ ျဖစ္သြားပါမယ္။

[9,1,8,6,7,4]
[1,9,8,6,7,4]
[1,8,9,6,7,4]
[1,8,6,9,7,4]
[1,8,6,7,9,4]
[1,8,6,7,4,9]

အခု ေနာက္ဆံုး အခန္းက အႀကီးဆံုး ကို ရပါၿပီ။ ေနာက္ တဆင့္ အစကေန ျပန္စမယ္။ ဒါေပမယ့္ ေနာက္ဆံုး အခန္းထိ စစ္ဖို႔ မလိုေတာ့ဘူး။ ဘာျဖစ္လို႔လည္း ဆိုေတာ့ ေနာက္ဆံုး အခန္း က အႀကီး ဆံုး value ျဖစ္ေနတာ ေသခ်ာသြားပါၿပီ။

[1,8,6,7,4,9]
[1,8,6,7,4,9]
[1,6,8,7,4,9]
[1,6,7,8,4,9]
[1,6,7,4,8,9]

အခု ဆိုရင္ ေနာက္ဆံုး အခန္း ၂ ခန္းက sorting ျဖစ္ေနၿပီ။ ဒီလို ပံုစံ နဲ႔ ေတာက္ေလွ်ာက္ စစ္ၿပီးေတာ့ ေနရာ ေရႊ႕ သြားမယ္။ ေနာက္ဆံုး ၂ ခန္း မပါပဲ ထပ္ၿပီး ေရႊ႕ ရင္ ေအာက္ကလို ရလာလိမ့္မယ္။

[1,6,7,4,8,9]
[1,6,7,4,8,9]
[1,6,7,4,8,9]
[1,6,4,7,8,9]

ကၽြန္ေတာ္ ေနာက္ တဆင့္ ထပ္ေရႊ႕မယ္။ ဘယ္အခ်ိန္ထိ ကၽြန္ေတာ္တို႔ ေတြ ဒီလို ေရႊ႕မွာလဲ ဆိုရင္ေတာ့ ေနာက္ကေန စၿပိး ေရွ႕ဆံုး အခန္း ေရာက္ေအာင္ ထိပဲ။

[1,6,4,7,8,9]
[1,6,4,7,8,9]
[1,4,6,7,8,9]
[1,4,6,7,8,9]
[1,4,6,7,8,9]

ကဲ အခု ဆိုရင္ေတာ့ ကၽြန္ေတာ္တို႔ေတြ sorting စီပံုကို သိထားၿပီ။ အဲဒီ အတြက္ code ေရးဖို႔ လုပ္ရေအာင္။

def bubble_sort(array): for num in range(len(array) - 1,0,-1): for i in range(num): if array[i] > array[i+1]: temp = array[i] array[i] = array[i+1] array[i+1] = temp return array alist = [1,6,4,7,8,9] print(bubble_sort(alist))

code ေလးကေတာ့ ႐ိုးရွင္းပါတယ္။ ထူးျခားတာကေတာ့ range(len(array) - 1,0,-1) ပါ။ အဲဒီ အဓိပၸာယ္ကေတာ့ len(array) - 1 ကေန 1 အထိ loop ပတ္မယ္လို႔ ဆိုလိုတာပါ။

အျခား language ေတြမွာေတာ့

for (i=len(array) - 1, i > 0 ; i--) {

}

ဆိုၿပီး ေရးၾကပါတယ္။

python ျဖစ္သည့္ အတြက္ေၾကာင့္

for num in range(len(array) - 1,0,-1):

ဆိုၿပီး ေရးသားထားတာပါ။

Array ကို nested loop ပတ္ထားတာကို ေတြ႕ႏိုင္ပါလိမ့္မယ္။ ပထမ loop ကေတာ့ ေနာက္ဆံုး အခန္းကေန စတယ္ ပထမဆံုး အခန္းထိ။ ဒုတိယ loop ကေတာ့ ပထမ အခန္းကေန စတယ္။ range(num) ထိ loop ပတ္ပါတယ္။ ဘာေၾကာင့္ အဲလို loop ပတ္သလဲ ဆိုတာကိုေတာ့ ကၽြန္ေတာ္တို႔ အထက္မွာ ရွင္းျပၿပီးပါၿပီ။ ပထမဆံုး အႀကိမ္မွာ ေနာက္ဆံုး အခန္းက အႀကီးဆံုး value ဝင္တယ္။ ေနာက္တစ္ႀကိမ္ဆိုရင္ ေနာက္ဆံုး အခန္း ထည့္တြက္ ဖို႔ မလိုေတာ့ဘူး။ ဒါေၾကာင့္ပါ။

ဒီမွာ ဘာျပႆနာရွိလဲ ဆိုေတာ့ sorting စီထားၿပီးသားဆိုရင္ေပမယ့္ ထပ္ၿပီး အကုန္လံုး loop ပတ္ေနတာကို ေတြ႕ႏိုင္ပါတယ္။ sortng စီထားၿပီးမွန္း ဘယ္လို သိသလဲဆိုေတာ့ ဒုတိယ loop ထဲမွာ တစ္ခါမွ data အေျပာင္းအလဲ မလုပ္ရရင္ေတာ့ sorting စီထားၿပီးမွန္း သိႏိုင္ပါတယ္။

ဒါေၾကာင့္ ကၽြန္ေတာ္တို႔ အခုလို ျပင္ေရးပါမယ္။

def bubble_sort(array): exchange = True num = len(array) - 1 while num > 0 and exchange: exchange = False for i in range(num): if array[i] > array[i+1]: exchange = True temp = array[i] array[i] = array[i+1] array[i+1] = temp num = num - 1 return array alist = [1,2,3,4,8,9] print(bubble_sort(alist))

ကၽြန္ေတာ္တို႔ exchange ဆိုသည့္ variable ေလးထည့္ၿပီးေတာ့ loop ထပ္လုပ္မလုပ္ဆိုတာကို ထိန္းထားတာကို ေတြ႕ႏိုင္ပါတယ္။ တစ္ေၾကာင္းျခင္းစီကိုေတာ့ ကိုယ္တိုင္ လိုက္ၾကည့္ၿပီးေတာ့ နားလည္ ႏိုင္မယ္လို႔ ထင္ပါတယ္။

results matching ""

    No results matching ""