Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. Algoritm Pengurutn Dlm Pemrogrmn Muhmmd Oky Erzndi - 13507098 Jurusn Teknik Informtik Institut Teknologi Bndung Emil : if17098@students.if.itb.c.id Abstrct Mklh ini menjbrkn tentng lgoritm pengurutn yng umum digunkn di dlm duni informtik. Muli dri yng sederhn hingg yng kompleks. Algoritm pengurutn member mnft yng sngt bnyk di duni informtik. Algoritm pengurutn dlh lgoritm untuk menyimpn sebuh list tertentu pd sutu urutn tertentu, bisny membesr tu mengecil. Umumny digunkn untuk mengurutkn huruf tu ngk. Pd mklh ini kn diuls mengeni pengurutn, lgoritm, teknik, dn efisiensiny. Dlm sutu lgoritm perlu diperhtikn efisiensiny. Kren efisiensi mmpu mengoptimlkn lgoritm-lgoritm yng lin yng kn digunkn. Semkin efisien sutu lgoritm, mk pd st dieksekusi dn dijlnkn kn menghbiskn wktu yng lebih cept. Kren itu efisiensi lgoritm termsuk hl yng penting pd pemrogrmn. Pd lgoritm pengurutn ini, msukn yng diterim dlh list tertentu yng belum psti terurut dn kelurnny berup list yng sudh terurut. Algoritm pengurutn yng kn dibhs pd mklh ini yitu bubble sort, insertion sort, merge sort, dn quick sort. Algoritm di ts menrik untuk dibhs kren d kelebihn dn kekurngn msing-msing sesui tingktn msing-msing. Mklh ini dihrpkn memberi pembc pemhmn cr-cr menggunkn lgoritm sorting yng efisien. Dihrpkn pembc mmpu meliht kelebihn dn kekurngn tip lgoritm secr menyeluruh. Kt kunci : lgoritm, urut, efisiensi 1. PENDAHULUAN Pd st kit membut sebuh progrm sering kli kit menghdpi permslhn yng memerlukn pengrutn sutu nili integer bik secr lngsung tu pun tidk. Mislny kit melkukn mencri sebuh nili pd sutu list, permslhn knlebih mudh diselesikn jik kit mengurutkn terlebih dhulu list tersebut dri kecil ke besr, kit tinggl melkukn pencrin nili tersebut selm nili tersebut lebih kecil tu sm dengn nili yng ditelusuri pd list. Jik nili dri dlm list sudh lebih besr dri nili yng kit cri berrti sudh psti nili yng dicri tersebut tidk d. Ini juh lebih efektif dibndingkn mengecek semu nili pd list tersebut dri wl smpi khir jik nili itu tidk d, ini sngt tidk efektif/ byngkn jik kit hrus mencri stu nili dlm dt yng jumlhny mencpi jutn tu milyrn, bhkn triliunn. Sdr tu tidk mnusi sering melkukn pengurutn dengn teknik-teknik tertentu dlm kehidupn sehri-hri. Mislny st kit bermin krtu remi, kit kn mengmbil krtu tersebut dn mengurutknny dengn cr-cr tertentu. Bil kit mengmbil krtu tersebut stu-per-stu dri tumpuknny dn setip mengmbil kit lngsung mengurutknny dlm lgoritm pengurutn, cr tersebut dlh implementsi dri insertion sort. Nmun bil krtu dibgikn semuny terlebih dhulu kemudin bru kit kelompokn menurut jenisny. Kemdin brulh kit urutkn dri pling kecil ke pling besr mk itulh yng disebut selection sort. Algoritm-lgoritm pengurutn ini bisny dibedkn berdsrkn: Kompleksits perbndingn ntr elemen (terkit dengn ksus terbik dn terburuk ) dinotsikn dengn O(n log n) untuk pencrin yng bik, dn Ώ(n²) sebgi ksus yng buruk. Kompleksits pertukrn elemen, terkit dengn cr yng digunkn elemen setelh dibndingkn. Penggunn memori. Ad beberp jenis lgoritm yng memerlukn memori sementr untuk menyimpn list Rekursif. Metode-metode penggunny, seperti exchnge, insertion, prtition, merging, dn selection. 2. ALGORITMA PENGURUTAN 2.1. Bubble Sort Bubble sort dlh slh stu metodepengurutn exchnging yng bersift lngsung dn termsuk jenis pengurutn yng pling sederhn. Nm bubble sort sendiri bersl dri sift nili elemen terbesr yng sellu nik ke ts (ke khir dri list) seperti gelembung udr(bubble). Ide dri bubble sort dlh sebgi berikut : 1. pengecekn dimuli dri elemen pling wl. 2. Elemen ke-1 dn ke-2 dri list
Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. dibndingkn. 3. Jik elemen pertm lebih besr dri elemen kedu, dilkukn pertukrn. 4. Lngkh 2 dn 3 dilkukn lgi terhdp elemen kedu dn ketig, seterusny smpi elemen terkhir. 5. Bil sudh smpi di elemen terkhir dilkukn pengulngn lgi dri wl smpi tidk d terjdi lgi pertukrn elemen. 6. Bil tidk d pertukrn elemen lgi, mk elemen list terurut. Contoh psuedocode untuk lgoritm bubble sort dengn urutn membesr : procedure bubblesort( A : list of integer ) vr temp,i : integer tukr :boolen Algoritm do tukr := flse for i = 1 to length( A ) - 1 do if A[ i ] > A[ i + 1 ] then temp:=a[i] A[i]:=A[i+1] A[i+1]:=temp tukr := true while tukr Pd setip pengulngn (loop) dilkukn pengecekn terhdp tip elemen muli elemen pertm dn kedu, elemen kedu dn ketig, dn seterusny smpi elemen sebelum terkhir. Bil msih terjdi pertukrn (tukr = true) dilkukn pengecekn lgi smpi tidk terjdi pertukrn (tukr = flse) yng berrti semu elemen dlm list tersebut sudh terurut membesr. Contoh: 5 3 8 7 9 1 wl (belum terurut ) 3 5 7 8 1 9 pengulngn ke-1 3 5 7 1 8 9 pengulngn ke-2 3 5 1 7 8 9 pengulngn ke-3 3 1 5 7 8 9 pengulngn ke-4 1 3 5 7 8 9 pengulngn ke-5 (terurut) Slh stu kelebihn lgoritm bubble sort, terjdi st semu elemen sudh terurut (kompleksits = O(n) ) di mn hny terjdi pengecekn pd setip elemen, sehingg penelusurn hny dilkukn stu kli sj. Ini merupkn ksus terbik yng mungkin terjdi pd lgoritm ini. Kelebihn lin dri lgoritm ini dlh dpt dieksekusi dn dijlnkn dengn cukup cept dn efisien untuk sebuh ksus yng hny mengurutkn list yng urutnny sudh hmpir benr. Selin ksus terbik tersebut, kompleksits untuk lgoritm ini kn menjdi O(n²). Krenny lgoritm ini sngt tidk efisien untuk dipergunkn dlm duni pemrogrmn yng sesungguhny, plgi jik pengurutn dilkukn terhdp elemen yng brjumlh sngt besr. Kelebihn lin bubble sort dlh kemudhn untuk dimengerti. Umumny lgoritm ini sering digunkn untuk mengenlkn lgoritm pengurutn dlm duni komputer kren kesederhnn ideny. Nmun Owen Astrchn,seorng peneliti, mengutrkn sebikny lgoritm bubble sort ini tidk dijrkn lgi di duni komputer// Posisi setip elemen pd bubble sort kn sngt menentukn perform st eksekusi. Bil elemen yng terbesr disimpn di wl, mk tidk kn menimbulkn persoln sebb elemen tersebut secr cept kn ditukr lngsung ke elemen pling terkhir. Seblikny jik elemen terkecil disimpn di bgin pling khir elemen, mk kn mengkibtkn elemen tersebut kn bergerk sebnyk hny stu pergesern setip msuk ke loop. Ini berrti hrus dilkukn pengecekn sebnyk n kli dlm stu loop dn loop kn dijlnkn sebnyk n kli jug. Kedu jenis ini bis disebut rbbit dn turtle. Untuk menghilngkn mslh rbbit dn turtle ini, lgoritm ini dikembngkn dengn menciptkn lgoritm cocktil sort dn comb sort. Cocktil sort cukup bik untuk mengtsi permslhn ini nmun untuk ksus terburuk kompleksitsny sm dengn bubble sort yitu O(n²). Comb sort cukup bik untuk mempercept turtle pd elemen list dn jug memiliki kompleksits yng cukup bik, yitu n log n, nmun comb sort pun memiliki kelemhn, yitu tidk stbil pd st pengurutn. Kedu lgoritm di ts tidk kn dibhs pd mklh ini. Kelemhn yng lin dlh bubble sort berinterksi dengn buruk pd computer modern st ini. Penulisny menghbiskn tempt du kli lebih bnyk dri insertion sort dn jug sering melkukn cche misses dn lebih bnyk terjdi brnch missprediction. Penelitin yng dilkukn oleh Astrchn pd pengurutn string di jv jug membuktikn bhw bubble sort lim kli lebih lmbt dri insertion sort. Krenny pd implementsiny bubble sort jrng digunkn, meskipun bnyk jug lgoritm lin yng dikembngkn dri bubble sort ini. Dri nlisis tersebut, lgoritm ini sebikny tidk diimplementsikn sebb
Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. termsuk tidk efisien penggunnny, hny bik digunkn untuk mengurutkn list yng sudh hmpir terurut. Selin itu pengurutn jenis ini sngt tidk efisien dn memkn bnyk wktu st dieksekusi. Nmun kren lgoritm ini termsuk sederhn membutny cukup mudh untuk dijrkn sebgi dsr dri lgoritm pengurutn. 2.2. Insertion Sort Algoritm insertion sort dlh sebuh lgoritm sederhn yng cukup efisien untuk mengurutkn sebuh list yng hmpir terurut. Algorim ini jug bis digunkn sebgi bgin dri lgoritm yng lebih cnggih. Cr kerj lgoritm ini dlh dengn mengmbil elemen list stu-per-stu dn memsukknny di posisi yng benr seperti nmny. Pd rry, list yng bru dn elemen sisny dpt berbgi tempt di rry, meskipun cukup rumit. Untuk menghemt memori, implementsiny menggunkn pengurutn di tempt yng membndingkn elemen st itu dengn elemen sebelumny yng sudh diurut, llu menukrny terus smpi posisiny tept. Hl ini terus dilkukn smpi tidk d elemen tersis di input. Seperti sudh dibhs di bgin pendhulun, slh stu implementsiny pd kehidupn sehri-hri dlh st kit mengurutkn krtu remi. Kit mbil krtu stuper-stu llu membndingkn dengn krtu sebelumny untuk mencri posisi yng tept. Vrisi pd umuny yng dilkukn terhdp rry pd insertion sort dlh sebgi berikut : Elemen wl di msukkn sembrng, llu elemen berikutny dimsukkn di bgin pling khir. Elemen tersebut dibndingkn dengn elemen ke (x-1). Bil belum terurut posisi elemen sebelumny digeser sekli ke knn terus smpi elemen yng sedng diproses menemukn posisi yng tept tu smpi elemen pertm. Setip pergesern kn menggnti nili elemen berikutny, nmun hl ini tidk menjdi persoln sebb elemen berikutny sudh diproses lebih dhulu. Sebelum insert Sesudh insert Contoh psuedocode untuk bubble sort dengn urutn membesr : procedure insertionsort(a : list of integer) vr Nili,I,j : integer Algoritm for i = 1 to length[a]-1 do nili = A[i] j = i-1 while (j >= 0) nd (A[j] > nili) do A[j + 1] = A[j] j = j-1 end while A[j+1] = nili Pertukrn yng berulng terjdi di pengulngn while yng kn berhenti st elemen sebelumny sudh lebih kecil. Pengulngn for bergun untuk melkukn insert elemen selnjutny. Ksus terbik pd lgoritm ini dlh st semu elemen sudh terurut. Pengecekn tip elemen hny dilkukn 1 kli sehingg hny terjdi n kli pengulngn iterte (komplesits = O(n)). Sedngkn ksus terburuk dlh st list d dlm kondisi terblik yng membutuhkn n buh pertukrn terhdp n buh elemen, sehingg kompleksitsny sm dengn O(n²). kompleksits ini sm dengn kompleksits rt-rtny. Ini berrti untuk menghitung jumlh elemen yng sngt besr lgoritm ini kurng efisien untuk digunkn. Nmun untuk melkukn sorting terhdp elemen yng sedikit, lgoritm ini termsuk lgoritm tercept eksekusiny. Hl ini disebbkn pengulngn di dlmny sngt cept. Jik kit membndingkn dengn bubble sort, keduny memiliki kompleksits yng sm untuk ksus terburuk, nmun menurut Astrchn keduny sngt berbed dlm jumlh pertukrn yng diperlukn. Krenny sekrng ini cukup bnyk text book yng merekomendsikn insertion sort disbnding bubble sort. Insertion sort ini memiliki beberp keuntungn: 1. Implementsi yng sederhn 2. Pling efisien untuk dt berukurn kecil 3. Merupkn online lgorithmic, yng berrti bis lngsung melkukn sort setip d dt
Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. bru 4. Proses di tempt (memerlukn O(1) memori tmbhn) 5. Stbil. Pd thun 2004 Bender, Frch-Colton, nd Mosteiro menemukn pengembngn bru dri lgoritm ini, disebut librry sort tu gpped insertion sort yng menggunkn beberp gp kosong di sepnjng rry. Dengn lgoritm ini, pergesern elemen dilkukn smpi gp tersebut dicpi. Algoritm ini cukup bik dengn kompleksits O(n log n). 2.3. Merge Sort Merge sort ini memnftkn sebuh fungsi merge dengn spesifiksi mengurutkn 2 buh list yng elemen tip list sudh terurut. Dengn ide ini list yng kn diproses dibgi-bgi dulu menjdi list yng lebih kecil hingg tingl stu elemen. Setelh itu digbung kembli dri du list menjdi stu, llu digbung kembli terus smpi menjdi 2 list besr yng setelh dimerge kn menghsilkn list yng sudh terurut. Sorting jenis ini sngt bergun st kit kn memproses jumlh elemen yng sngt bnyk. Konsep dri merge sort sendiri dlh sebgi berikut : 1. Bgi list besr menjdi setenghny 2. Lkukn hl ini secr rekursif smpi diperoleh list dengn stu elemen sj 3. List tersebut digbung lgi menjdi sebuh list besr yng sudh terurut. Contoh pseudocode untuk merge sort : function mergesort(m) vr kiri, knn, hsil :list tengh: integer lgoritm if length(m) 1 then return m else tengh = length(m) div 2 for x = m to tengh do dd x to kiri for x = m fter tengh do dd x to knn kiri = mergesort(kiri) knn = mergesort(knn) hsil = merge(kiri, knn) return hsil function merge(kiri,knn) vr hsil:list lgoritm while length(kiri) > 0 nd length(knn) > 0 do if first(kiri) first(knn) then ppend first(kiri) to hsil kiri = rest(kiri) else ppend first(knn) to hsil knn = rest(knn) end while if length(kiri) > 0 then ppend rest(kiri) to hsil if length(knn) > 0 then ppend rest(knn) to hsil return hsil Merge sort memiliki ksus terburuk dn ksus rt-rt. Ksus terburuk dlh st tip 2 lemen dibndingkn sellu dilkukn pertukrn. Bil wktu yng diperlukn untuk melkukn merge sort dlh T(n) mk untuk st rekursif wktu yng dihbiskn dlh T(n) = 2T(n/2) + n. T (n/2) dlh wktu yng diperlukn untuk merge setengh dri ukurn list, dn ditmbh n sebgi lngkh dri penggbungn list. Kompleksits wktu terburuk dn rt-rt dri merge sort dlh O(n log n), sm dengn kompleksits terbik dri quick sort. Untuk mengurutkn dt yng sngt besr, jumlh perbndingn yng dihrpkn mendekti nili n di mn Dibnding dengn lgoritm lin, merge sort ini termsuk lgoritm yng sngt efisien dlm penggunnny sebb setip list sellu dibgibgi menjdi list yng lebih kecil, kemudin digbungkn lgi sehingg tidk perlu melkukn bnyk perbndingn. Merge sort ini merupkn lgoritm terbik untuk mengurutkn linked list, sebb hny memerlukn memori tmbhn sebesr Θ(1). Berdsrkn nlisis tersebut, merge sort bis dibilng sebgi slh stu lgoritm terbik terutm untuk mengurutkn dt yng jumlhny sngt bnyk. Untuk dt yng sedikit, lgoritm ini sebikny tidk digunkn kren d beberp lgoritm lin yng bis bekerj lebih cept dri merge sort. fungsi merge sendiri pseudocodeny contohny:
Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. Ilustrsiny dlh sebgi berikut (implementsi dri merge sort terhdp 7 buh nili): Gmbr 1. Ilustrsi lgoritm pengurutn merge sort 2.3. Quick Sort Quick sort merupkn divide nd conquer lgorithm. Algoritm ini mengmbil slh stu elemen secr ck (bisny dri tengh) llu menyimpn semu elemen yng lebih kecil di sebelh kiriny dn semu elemen yng lebih besr di sebelh knnny. Hl ini dilkukn secr rekursif terhdp elemen di sebelh kiri dn knnny smpi semu elemen sudh terurut. Algoritm ini termsuk lgoritm yng cukup bik dn cept. Hl penting dlm lgoritm ini dlh pemilihn nili tengh yng bik sehingg tidk memperlmbt proses sorting secr keseluruhn. Ide dri lgoritm ini dlh sebgi berikut : 1. Pilih stu elemen secr ck 2. Pindhkn semu elemen yng lebih kecil ke sebelh kiri elemen tersebut dn semu elemen yng lebih besr ke sebelh knnny. 3. Elemen yng niliny sm bis disimpn di slh stuny. Ini disebut opersi prtisi 4. Lkukn sort secr rekursif terhdp sublist sebelh kiri dn knnny. Berikut dlh psudocode untuk quicksort : function quicksort(rry) vr kecil,sm,besr :list lgoritm if length(rry) 1 then return rry pivot{mengmbil sebuh nili} for ech x in rry if x < pivot then ppend x to kecil if x = pivot then ppend x to sm if x > pivot then ppend x to besr return conctente(quicksort(kecil), sm, quicksort(besr)) Setip elemen yng kn disort sellu diperlkukn secr sm di sini, dimbil slh stu elemen, dibgi menjdi 3 list, llu ketig list tersebut disort dn digbung kembli. Contoh kode di ts menggunkn 3 buh list, yitu yng lebih besr, sm dn lebih kecil niliny dri pivot. Untuk membut lebih efisien, bis digunkn 2 buh list dengn mengeliminsi yng niliny sm (bis digbung ke slh stu dri 2 list yng lin). Ksus terburuk dri lgoritm ini dlh st dibgi menjdi 2 list, stu list hny terdiri dri 1 elemen dn yng lin terdiri dri n-2 elemen. Untuk ksus terburuk dn ksus rt-rt, lgoritm ini memiliki kompleksits sebesr O(n log n). Jumlh rt-rt perbndingn untuk quick sort berdsrkn permutsiny dengn sumsi bhw nili pivot dimbil secr rndom dlh :
Generted by Foxit PDF Cretor Foxit Softwre http://www.foxitsoftwre.com For evlution only. Tbel 1. Perbndingn kompleksits berbgi lgoritm pengurutn 3. KESIMPULAN Penggunn lgoritm pengurutn dlm ilmu komputer memng sngt diperlukn sebb kit tidk bis membut lgoritm dengn prinsip yng penting jln. Bil ingin mengurutkn dt yng sedikit jumlhny mk sebikny menggunkn insertion sort. Nmun bil ingin mengurutkn dt yng sngt bnyk, merge sort dn quick sort kn menjdi pilihn yng bik. Bubble sort sendiri hny sebuh lgoritm sederhn yng sebikny tidk diimplementsikn lgi. Msih bnyk lgoritm pengurutn yng lin, dengn segl kelebihn dn kekurngnny. Kren itu pemilihn kompleksits wktu dn rung sngt penting di sini. Mklh ini tidk membhs semu lgoritm pengurutn, kren untuk membhs stu lgoritm secr mendlm pun kn sngt rumit dn mungkin menghbiskn stu mklh ini. Nmun mellui tulisn ini, pembc dihrpkn mmpu mengnlis penggunn sorting lgorithmic yng bik. DAFTAR REFERENSI [1] Wikipedi, the free encyclopedi. (2006). Sorting lgorithmic. http://en.wikipedi.org/wiki/sorting_lgorithm Tnggl kses : 2 Jnuri 2009 pukul 20.00. [2] Munir, Rinldi. (2008). Diktt Kulih IF2093 Struktur Diskrit Edisi Keempt. Deprtemen Teknik Informtik, Institut Teknologi Bndung.