SORTINGsi.ilkom.unsri.ac.id/wp-content/uploads/2018/11/BAB-III...Buble sort (Pengurutan Gelembung)...

24
SORTING BAB IV

Transcript of SORTINGsi.ilkom.unsri.ac.id/wp-content/uploads/2018/11/BAB-III...Buble sort (Pengurutan Gelembung)...

SORTING BAB IV

Defenisi

Proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun secara teratur menurut suatu aturan tertentu.

Pada umumnya pengurutan ada 2 jenis

Ascending (Naik)

Descending (turun)

Contoh :

• Data acak :

5 6 8 1 3 25 10

• Terurut Ascending:

1 3 5 6 8 10 25

• Terurut Descending:

25 10 8 6 5 3 1

Metode

Ada beberapa metode pengurutan yaitu ;

1. Buble sort (Pengurutan Gelembung)

2. Selection Sort

3. Insertion Sort

4. Shell Sort

Prinsip

• Metode Buble dan selection menggunakan prinsip pertukaran elemen dalam proses pengurutan sehingga keduanya dinamakan dengan pertukaran (exchane sort)

• Metode Insertion dan Shell menggunakan prinsip geser dan sisip elemen dan proses pengurutan

• Ke-4 metode menggunakan operasi perbandingan elemen larik untuk menemukan urutan yang tepat.

Buble sort (Pengurutan Gelembung)

Dilakukan dengan prinsip gelebung air

Jika terurut menaik maka elemen yang terkecil dipindahkan keujung kiri melalui proses pertukaran

Proses ini dilakukan sebanyak N-1, N adalah ukuran larik L[N]

1 I, I+1 N Sudah terurut Belum terurut

Algoritma Pengurutan Gelembung

(Terurut Menaik)

• Untuk setiap pass I = 1,2,…,N-1 Lakukan :

Mulai dari elemen K = N, N-1,…., I+1 Lakukan :

1.1 Bandingkan L[K] dengan L[K-1]

1.2 Pertukarkan L[K] dengan L[K-1] Jika L[K] < L[K-1]

Algoritma

Deklarasi : int I,K,Temp; Deskripsi : for (I 1, I < N, I++) { for (K=N, K>i+1,K++) { if L[K] < L[K-1] //Tukar L[K] dengan L[K-1] { Temp L[K] L[K] L[K-1] L[K-1] Temp } } };

Proses pertukaran Temp L[K], L[K] L[K-1], L[K-1] Temp

Procedure tukar (int a,b)

Deklarasi :

int temp;

Deskripsi :

temp a

a b

b temp

Deklarasi : int I,K,Temp; Deskripsi : for (I 1, I < N, I++)

{ for (K=N, K>2,K++) { if L[K] < L[K-1] //Tukar L[K] dengan L[K-1] { tukar (L[K], L[K-1]) } } };

Metode Pengurutan Pilih

(Selection Sort)

• Metode ini memiliki konsep memilih data yang maksimum/minimum dari suatu kumpulan data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau paling awal sesuai pengurutan yang diinginkan

Metode Pengurutan Pilih

(Selection Sort)

• Data maksimum/minimum yang diperoleh, diasingkan ke tempat lain, dan tidak diikutsertakan pada proses pencarian data maksimum/minimum berikutnya

Perhatikan ilustrasi berikut

• Misalkan ada sekumpulan data acak berjumlah n elemen yang disimpan di dalam larik L, akan diurut menaik, maka langkah-langkah yang harus dilakukan adalah:

• Menentukan jumlah iterasi, yaitu pass = n – 1.

• Untuk setiap pass ke-i = 1,2,...,pass, lakukan:

• Cari elemen terbesar (maks) dari elemen ke-i sampai ke-n.

• Pertukarkan maks dengan elemen ke-i.

• Kurangin n satu (n = n – 1).

Rincian tiap-tiap pas adalah sebagai

berikut:

• pass 1 • Cari elemen maksimum di dalam L[0...(n-1)]. • Pertukarakan elemen maksimum dengan elemen L[n-1].

• pass 2 • Cari elemen maksimum di dalam L[0...(n-2)]. • Pertukarakan elemen maksimum dengan elemen L[n-2].

• pass 3 • Cari elemen maksimum di dalam L[0...(n-3)]. • Pertukarakan elemen maksimum dengan elemen L[n-3].

. . . • pass 4

• Cari elemen maksimum di dalam L[0...1]. • Pertukarakan elemen maksimum dengan elemen L[1].

(Contoh Halaman 43 )

Algoritma

Deklarasi : int I,J, Imaks, Maks,Temp; Deskripsi : for (I N, I >1, I--) // jumlah pas = n-1 { Imaks 1 Maks L[1] for (J 2, J<I+1,J++) { if (L[J] > maks) { Imaks J Maks L[J] } }

{ Temp L[I] L[I] Maks L[Imaks] Temp } };

Latihan

• Buat contoh pengurutan seleksi minimum

Metode Pengurutan Sisip

(Insertion Sort)

• Metode ini dilakukan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan melakukan pencarian beruntun di dalam larik.

Metode Pengurutan Sisip

(Insertion Sort)

• Untuk setiap pass ke-i = 1,2,...,n-1 lakukan:

• X = L[i]

• Sisipkan x pada tempat yang sesuai anatara L[0]...L[i].

Rincian tiap-tiap pass adalah sebagai

berikut:

Dianggap pass 0 : L[0] dianggap sudah pada tempatnya. • pass 1 x = L[1] harus dicari tempatnya yang tepat pada L[0..1] dengan cara

menggeser elemen L[0..0] ke kanan bila L[0..0] lebih besar daripada L[1]. Misalkan posisi yang tepat adalah k, sisipkan L[1] pada L[k].

• pass 2 x = L[2] harus dicari tempatnya yang tepat pada L[0..2] dengan cara

menggeser elemen L[0..1] ke kanan bila L[0..1] lebih besar daripada L[2]. Misalkan posisi yang tepat adalah k, sisipkan L[2] pada L[k].

. . • pass n-1 x = L[n-1] harus dicari tempatnya yang tepat pada L[0..(n-1)]

dengan cara menggeser elemen L[0..(n-2)] ke kanan bila L[0..(n-2)] lebih besar daripada L[n-1]. Misalkan posisi yang tepat adalah k, sisipkan L[n-1] pada L[k].

Deklarasi int I,J,y; bolean ketemu; Deskripsi for(i=1;i<N;i++) { /* sisipkan L[i] ke dalam

bagian yang sudah terurut */

x = L[i]; /*cari posisi yang tepat

untuk x di dalam L[0..i-1] sambil menggeser */

j=i-1; ketemu = false;

while ((j>=0)&&(!ketemu))

{ if(x < L[j]) { L[j+1] = L[j]; j--; } else { ketemu = true; } } /* j < 1 or ketemu */ L[j+1] = x; } }