minimum dikurang 1 satu untuk yang menunjukkan indeks yang akan dilewati di fase berikutnya. Kemudian, prosedur ini mendistribusikan elemen pada tiga array,
elemen positif disimpan dalam PosArray menggunakan elemen itu sendiri sebagai indeks, elemen-elemen negatif disimpan dalam NegArray menggunakan nilai absolut
dari elemen itu sendiri sebagai indeks, dan elemen yang sering muncul disimpan dalam FreqArray menggunakan variabel i sebagai indeks dimulai dari nol dan
seterusnya bertambah satu. Prosedur ketiga adalah prosedur Sort pengurutan yang menyalin elemen-elemen
dari NegArray mulai dari indeks terakhir dan mengabaikan elemen NegArray yang berisi nilai minimum kurang 1 satu. Kemudian menyalin elemen-elemen dari
PosArray mulai dari indeks pertama dan juga mengabaikan elemen PosArray yang berisi nilai nilai minimum dikurang 1 satu. Penyalinan dilakukan pada array input
asli dengan menimpa nilai-nilai asli dengan nilai-nilai yang telah diurutkan. Setelah menyalin setiap elemen dari NegArray dan PosArray ke array yang asli, kemudian
dilanjutkan prosedur pencarian FreqArray dan menyalin semua elemen yang sama dengan elemen yang disalin dalam operasi penyalinan terakhir elemen saat ini
Mansi, 2010.
2.11. Pseudocode Algoritma SMS
Prosedur Scanarray, size if size 1 then
1 var a, max, min, NOP, NON
2 max:=array0
3 min:=array0
4 NOP:=0
5 NON:=0
6 for a:= 0 to size-1 do
7 if arraya max then
8 max := arraya
9 else
10 min:=arraya
11 end if
12
Universita Sumatera Utara
if arraya = 0 then 13
NOP:= NOP+1 14
else 15
NON:= NON+1 16
end if 17
end for 18
if min ≠ max then
19 Movearray, size, NOP, NON, max, min
20 end if
21 end if
22 Akhir prosedur Scan
Prosedur Movearray, size, NOP, NON, max, min var b,c,d,i
1 i:=0
2 create a new array: FreqArray[size] and initialize by the value min-1
3 if NOP 0 then
4 create a new array:PosArray[max+1]
5 for b:=0 to max do
6 PosArrayb:= min-1
7 end for
8 end if
9 if NON0 then
10 create a new array: NegArray[|min|+1]
11 for c:= 0 to |min|+1 do
12 NegArrayc:= min-1
13 end for
14 end if
15 for d:= 0 to size-1 do
16 if arrayd = 0 then
17 if PosArrayarrayd==min-1 then
18 PosArrayarrayd:=arrayd
19 else
20
Universita Sumatera Utara
FreqArrayi:=arrayd 21
i:=i+1 22
end if 23
else 24
if NegArray|arrayd|==min-1 then 25
NegArray|arrayd|:= arrayd 26
else 27
FreqArrayi:= arrayd 28
i:= i+1 29
end if 30
end if 31
end for 32
Sortarray, NegArray, PosArray, FreqArray, NON, NOP, max, min, i 33
Akhir prosedur Move
Prosedur Sortarray, NegArray, PosArray, FreqArray, NON, NOP, max, min, i var index,x,y
1 index:=0
2 if NON 0 then
3 for x:= |min| downto 0 do
4 if NegArrayx
≠ min-1 then 5
arrayindex:= NegArrayx 6
index:= index+1 7
for y:= 0 to i do 8
if FreqArrayy==arrayindex-1 then 9
arrayindex:= FreqArrayy 10
index:= index+1 11
end if 12
end for 13
end if 14
end for 15
end if 16
if NOP 0 then 17
Universita Sumatera Utara
for x:= 0 to max do 18
if PosArrayx ≠ min-1 then
19 arrayindex:= PosArrayx
20 index:= index+1
21 for y:= 0 to i do
22 if FreqArrayy== arrayindex-1 then
23 arrayindex:=FreqArrayy
24 index:= index+1
25 end if
26 end for
27 end if
28 end for
29 end if
30 Akhir prosedur Sort
2.12. Kompleksitas Waktu Algortima SMS
Algoritma SMS terdiri dari tiga prosedur, yakni Scan, Move, dan Sort, berikut akan terlihat kompleksitas waktu dari ketiga prosedur tersebut yang akan menghasilkan
kompleksitas waktu keseluruhan dari algoritma SMS
2.12.1. Kompleksitas waktu prosedur scan
Tujuan dari prosedur scan adalah untuk mendapatkan nilai maksimum, nilai minimum, jumlah elemen positif, dan jumlah elemen negatif dari array masukan. Hal
ini memerlukan pengenalan array dimana setiap elemen harus dikunjungi 1 satu kali. Untuk perulangan baris 7-18 prosedur scan memerlukan kompleksitas waktu On
Mansi, 2010.
Universita Sumatera Utara
2.12.2. Kompleksitas waktu prosedur move
Kasus terbaik prosedur move adalah ketika semua elemen dari array masukan adalah bilangan positif dan nilai maksimumnya kecil, atau ketika semua elemen dari array
masukan adalah bilangan negatif dan nilai minimumnya kecil. Jika semua elemen array adalah bilangan positif dan tidak ada yang negatif, maka untuk perulangan baris
6-8 dari prosedur move membutuhkan kompleksitas waktu Omax untuk menginisialisasi PosArray, dan untuk perulangan baris 16-32 dari prosedur move
membutuhkan kompleksitas waktu On. Berdasarkan penjelasan diatas, jika seluruh elemen array masukan merupakan bilangan positif, kompleksitas waktu keseluruhan
prosedur move adalah On + max. Di sisi lain, jika semua elemen dari array masukan adalah bilangan negatif, maka untuk perulangan baris 12 -14 prosedur move
membutuhkan kompleksitas waktu O|min| menginisialisasi NegArray, dan untuk perulangan baris 16 -32 prosedur move membutuhkan kompleksitas waktu On.
Dalam hal ini berarti, kompleksitas waktu keseluruhan prosedur move jika seluruh elemen array masukan merupakan bilangan negatif adalah On + |min|. Dapat
dikatakan bahwa dalam kasus rata-rata dan terburuk, jika terdapat elemen positif dan negatif dalam array masukan, maka kompleksitas waktu keseluruhan prosedur move
adalah On + max + |min| Mansi, 2010.
2.12.3. Kompleksitas waktu prosedur sort
Kasus terbaik prosedur sort adalah ketika semua elemen array masukan merupakan bilangan positif dan semua elemen berbeda serta bilangan maksimum bernilai kecil,
atau ketika semua elemen array masukan adalah bilangan negatif dan semua elemen berbeda serta bilangan minimum bernilai kecil. Jika semua elemen array masukan
adalah bilangan positif dan berbeda, maka perulangan baris 18-29 dari prosedur sort membutuhkan kompleksitas waktu Omax, karena perulangan baris 22-27 dari
prosedur sort membutuhkan kompleksitas waktu O1 dalam kasus ini. Jika semua elemen array masukan adalah bilangan negatif dan setiap elemen berbeda, maka
untuk perulangan baris 4-15 dari prosedur sort membutuhkan kompleksitas waktu O|min|, karena
perulangan baris 8-13 dari
prosedur sort membutuhkan
Universita Sumatera Utara
kompleksitas waktu O1 dalam kasus ini. Dapat dikatakan, pada kasus rata-rata, dan terburuk prosedur sort, prosedur Sort membutuhkan kompleksitas waktu Omax f
+ O|min| f, di mana f adalah jumlah elemen yang sama. Dengan kata lain, kompleksitas waktu prosedur sort adalah Of max + |min|.
Kompleksitas waktu kasus terbaik dari algoritma SMS adalah On, ketika array masukan sudah terurut. Ini berarti, ketika nilai max sama dengan min baris 19-21
prosedur scan maka array input sudah diurutkan. Dalam kasus rata-rata dan terburuk, prosedur scan memerlukan kompleksitas waktu On, prosedur move membutuhkan
kompleksitas waktu On + max + |min|, dan prosedur sort memerlukan kompleksitas waktu Of max + |min|. Jika dianggap distribusi data adalah normal, frekuensi
elemen harus sedikit, dan karena sebagian besar aplikasi nyata memiliki n jauh lebih besar dari nilai max dan |min|, dapat dipertimbangkan max dan min sebagai konstanta
dan menghilangkannya. Kompleksitas waktu keseluruhan dari algoritma SMS dalam kasus rata-rata dan terburuk adalah On + f max + | min |, di mana f adalah jumlah
elemen yang sama Mansi, 2010.
2.13. Kompleksitas Ruang Memori Algortima SMS