6
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 1 Pengurutan (Sorting) • Pengurutan adalah proses mengatur sekumpulan obyek menurut urutan atau susunan tertentu. • Urutan obyek tersebut dapat menaik atau menurun. Bila N obyek disimpan dalam larik L, maka pengurutan menaik berarti menyusun elemen larik sedemikian sehingga: • L[1] L[2] L[3] L[N] Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 2 Sedangkan pengurutan menurun berarti menyusun elemen larik sedemikian sehingga: L[1] L[2] L[3] L[N] Data yang diurut dapat berupa data bertipe numerik dasar atau tipe bentuk. Jika data bertipe bentukan (rekaman), maka harus dijelaskan berdasarkan field apa data tersebut diurutkan. Contoh: (i) 23, 27, 45, 67 (data integer terurut menaik) (ii) 25.12, 20.19,-12.20 (data riil terurut menurun) (iii) Amir, Badu, Budi, Dudi (data string terurut manaik) (iv) <08053110001, Eko, A>, < 08053110011, Reza, C>, <08053110012, Sam, E> (data mahasiswa terurut menaik berdasarkan field NIM) Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 3 Keuntungan Data Terurut • Mempercepat pencarian; Mudah menentukan data maksimum / minimum. Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 4 Pengurutan Terbagi Dua Kelompok: • Pengurutan Internal adalah pengurutan terhadap sekumpulan data yang disimpan di dalam memori utama komputer. Umumnya struktur data yang dipakai adalah larik, sehingga pengurutan internal disebut juga pengurutan larik. • Pengurutan Eksternal adalah pengurutan data yang disimpan di dalam memori sekunder, biasanya data bervolume besar sehingga tidak mampu dimuat semuanya dalam memori komputer, disebut juga pengurutan arsip (file), karena struktur eksternal yang dipakai adalah arsip.

Pengurutan pada C++

  • Upload
    ndraleo

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

Bahasa Pemrograman C++

Citation preview

Page 1: Pengurutan pada C++

1

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 1

Pengurutan (Sorting)• Pengurutan adalah proses mengatur

sekumpulan obyek menurut urutan ataususunan tertentu.

• Urutan obyek tersebut dapat menaik ataumenurun.

• Bila N obyek disimpan dalam larik L, makapengurutan menaik berarti menyusunelemen larik sedemikian sehingga:

• L[1] ≤ L[2] ≤ L[3] ≤ …≤ L[N] Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 2

• Sedangkan pengurutan menurun berarti menyusunelemen larik sedemikian sehingga:

• L[1] ≥ L[2] ≥ L[3] ≥ … ≥ L[N] • Data yang diurut dapat berupa data bertipe numerik

dasar atau tipe bentuk. Jika data bertipe bentukan(rekaman), maka harus dijelaskan berdasarkan field apadata tersebut diurutkan.

• Contoh:(i) 23, 27, 45, 67 (data integer terurut menaik)(ii) 25.12, 20.19,-12.20 (data riil terurut menurun)(iii) Amir, Badu, Budi, Dudi (data string terurut manaik)(iv) <08053110001, Eko, A>, < 08053110011, Reza, C>,

<08053110012, Sam, E> (data mahasiswa terurutmenaik berdasarkan field NIM)

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 3

Keuntungan Data Terurut

• Mempercepat pencarian;• Mudah menentukan data maksimum /

minimum.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 4

Pengurutan Terbagi Dua Kelompok:• Pengurutan Internal

adalah pengurutan terhadap sekumpulan data yang disimpan di dalam memori utamakomputer. Umumnya struktur data yang dipakaiadalah larik, sehingga pengurutan internal disebut juga pengurutan larik.

• Pengurutan Eksternaladalah pengurutan data yang disimpan di dalammemori sekunder, biasanya data bervolumebesar sehingga tidak mampu dimuat semuanyadalam memori komputer, disebut jugapengurutan arsip (file), karena struktur eksternalyang dipakai adalah arsip.

Page 2: Pengurutan pada C++

2

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 5

Macam-macam Pengurutan• Bubble Sort;• Maximum/Minimum Sort (Selection Sort);• Insertion Sort;• Heap Sort;• Shell Sort;• Quick Sort;• Merge Sort;• Radix Sort;• Tree Sort, dan lain-lain.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 6

Bubble Sort (Pengurutan Gelembung)• Metode pengurutan gelembung diinspirasikan oleh

gelembung sabun yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringandaripada berat jenis air, maka gelembung sabunselalu terapung ke atas permukaan.

• Prinsip di atas dipakai pada pengurutan gelembung. Elemen larik yang berharga paling kecil “diapungkan”, artinya diangkat ke atas (ke ujung kiri larik) melaluiproses pertukaran. Proses pengapungan terdiri dari N-1 langkah. Setiap akhir langkah ke-I, larik L[1..N] akanterdiri atas dua bagian, yaitu bagian yang sudahterurut, L[1..I] dan bagian yang belum terurut, L[I+1..N]. Langkah terakhir, diperoleh larik L[1..N] yang sudah terurut.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 7

Algoritma Pengurutan Gelembung• Untuk mendapatkan larik yang terurut menaik, proses yang

dilakukan pada setiap langkah sebagai berikut:Langkah 1: Mulai elemen K =N, N-1, …, 2, bandingkan L[K] dengan

L[K-1]. Jika L[K] < L[K-1], pertukarkan L[K] dengan L[K-1]. Padaakhir langkah 1, elemen L[1] berisi harga minimum pertama.

Langkah 2: Mulai elemen K =N, N-1, …, 3, bandingkan L[K] denganL[K-1]. Jika L[K] < L[K-1], pertukarkan L[K] dengan L[K-1]. Padaakhir langkah 2, elemen L[2] berisi harga minimum kedua dan larikL[1..2] terurut.

…Langkah N-1: Mulai elemen K =N, bandingkan L[K] dengan L[K-1].

Jika L[K] < L[K-1], pertukarkan L[K] dengan L[K-1].

Pada akhir langkah N-1, elemen L[N-1] berisi harga minimum ke-(N-1) dan larik L[1..N-1] terurut menaik, sehingga elemen yang tersisaadalah L[N] yang tidak perlu lagi diurutkan karena hanya satu-satunya.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 8

procedure UrutGelembung(input/output L: Larik; input N : integer)

KamusI : integer {pencacah untuk jumlah langkah}K : integer {pencacah untuk pengapungan pada setiap langkah}Temp : integer {peubah bantu untuk pertukaran}

Algoritmafor I ← 1 to N-1 do

for K ← N downto I+1 doif L[K] < L[K-1] then {pertukarkan L[K] dengan L[K-1]}

Temp ← L[K]L[K] ← L[K-1]L[K-1] ← Temp

endifendfor

endfor

Page 3: Pengurutan pada C++

3

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 9

procedure UrutGelembung1(input/output L: Larik; input N : integer)

KamusI : integer {pencacah untuk jumlah langkah}K : integer {pencacah untuk pengapungan pada setiap langkah}Temp : integer {peubah bantu untuk pertukaran}Tukar : boolean {flag untuk mengidentifikasi adanya pertukaran, bernilai true jika dalam satu langkah

ada pertukaran}

AlgoritmaI ← 1Tukar ← truewhile I ≤ N-1 AND Tukar do

Tukar ← falsefor K ← N downto I+1 do

if L[K] < L[K-1] then {pertukarkan L[K] dengan L[K-1]}Temp ← L[K]L[K] ← L[K-1]L[K-1] ← TempTukar ← true

endifendforI ← I + 1

endwhile { I = N or not Tukar }

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 10

Pengurutan Gravitasi

Pengurutan gravitasi sebagai kebalikan daripengurutan gelembung, yaitu“membenamkan” elemen larik yang berharga paling besar ke bawah, jadiproses “pemberatan” selalui dimulai dari“atas” ke “bawah”.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 11

procedure UrutGravitasi(input/output L: Larik; input N : integer)

KamusI : integer {pencacah untuk jumlah langkah}K : integer {pencacah untuk pemberatan pada setiap langkah}U : integer {indeks ujung kiri bagian larik yang telah terurut}Temp : integer {peubah bantu untuk pertukaran}

AlgoritmaU ← Nfor I ← 1 to N-1 do

for K ← 1 to U-1 doif L[K] > L[K+1] then {pertukarkan L[K] dengan L[K+1]}

Temp ← L[K]L[K] ← L[K-1]L[K-1] ← Temp

endifendfor{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }U ← U - 1

endfor

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 12

Pengurutan Maksimum/MinimumGagasan maksimum/minimum adalah memilih elemen

maksimum/minimum kemudian mempertukarkanelemen maksimum/minimum tersebut denganelemen terujung larik (elemen ujung kiri atau elemenujung kanan). Selanjutnya elemen terujung tersebut“diisolasi” dan tidak disertakan pada prosesselanjutnya. Proses yang sama diulang untukelemen larik yang tersisa, yaitu memilih elemenmaksimum/minimum berikutnya danmempertukarkannya dengan elemen terujung lariksisa.

Page 4: Pengurutan pada C++

4

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 13

Algoritma Pengurutan MaksimumElemen larik akan diurut menaik:Langkah 1: Tentukan harga maksimum di dalam

L[1..N]. Pertukarkan harga maksimum denganelemen L[N].

Langkah 2: Tentukan harga maksimum di dalamL[1..N-1]. Pertukarkan harga maksimum denganelemen L[N-1].

…Langkah N-1: Tentukan harga maksimum di

dalam L[1..2]. Pertukarkan harga maksimumdengan elemen L[2].

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 14

procedure UrutMaksimum(input/output L: Larik, input N : integer)Kamus LokalI : integer {pencacah untuk jumlah langkah}

J : integer {pencacah untuk mencari nilai maksimum}U : integer {indeks ujung kiri bagian larik yang telah terurut}Maks : integer {nilai maksimum sementara}Imaks : integer {indeks yang berisi nilai maksimum sementara}Temp : integer {peubah bantu untuk pertukaran}

AlgoritmaU ← N

for I ← 1 to N-1 doMaks ← L[1]Imaks ← 1for J ← 2 to U do

if L[J] > L[Imaks] thenMaks ← L[J]Imaks ← J

endifendfor

{pertukarkan Maks dengan L[U]}Temp ← L[U]L[U] ← L[Imaks]L[Imaks] ← Temp

{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }U ← U - 1

endfor

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 15

Algoritma Pengurutan Maksimumdengan Elemen Larik Diurut Menurun

Langkah 1: Tentukan harga maksimum di dalamL[1..N]. Pertukarkan harga maksimum denganelemen L[1].

Langkah 2: Tentukan harga maksimum di dalamL[2..N]. Pertukarkan harga maksimum denganelemen L[2].

…Langkah N-1: Tentukan harga maksimum di dalam

L[N-1,N]. Pertukarkan harga maksimum denganelemen L[N-1].

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 16

procedure UrutMaks_Menurun(input/output L: Larik, input N : integer)

Kamus LokalI : integer{pencacah untuk jumlah langkah}J : integer {pencacah untuk mencari nilai maksimum}Imaks : integer {indeks yang berisi nilai maksimum sementara}Temp : integer {peubah bantu untuk pertukaran}Algoritma

for I ← 1 to N-1 doImaks ← Ifor J ← I+1 to N doif L[J] > L[Imaks] then

Imaks ← Jendif

endfor{pertukarkan Maks dengan L[U]}Temp ← L[I]

L[I] ← L[Imaks]L[Imaks] ← Temp

endfor

Page 5: Pengurutan pada C++

5

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 17

Algoritma Pengurutan MinimumElemen larik akan diurut minimum menaik:Langkah 1: Tentukan harga minimum di dalam L[1..N].

Pertukarkan harga minimum dengan elemen L[N].Langkah 2: Tentukan harga minimum di dalam L[1..N-

1]. Pertukarkan harga minimum dengan elemen L[N-1].

…Langkah N-1: Tentukan harga minimum di dalam

L[1..2]. Pertukarkan harga minimum dengan elemenL[2].

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 18

procedure UrutMin(input/output L: Larik, input N : integer)

Kamus LokalI : integer {pencacah untuk jumlah langkah}J : integer {pencacah untuk mencari nilai minimum}U : integer {indeks ujung kiri bagian larik yang telah terurut}Imin : integer {indeks yang berisi nilai minimum sementara}Temp : integer {peubah bantu untuk pertukaran}

AlgoritmaU ← N

for I ← 1 to N-1 doImin ← 1for J ← 2 to U do

if L[J] < L[Imin] thenImin ← J

endifendfor{pertukarkan Maks dengan L[U]}Temp ← L[U]L[U] ← L[Imin]L[Imin] ← Temp{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }

U ← U - 1endfor

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 19

Algoritma Pengurutan Minimumdengan Elemen Larik Diurut Menurun

Langkah 1: Tentukan harga minimum di dalamL[1..N]. Pertukarkan harga minimum denganelemen L[1].

Langkah 2: Tentukan harga minimum di dalamL[2..N]. Pertukarkan harga minimum denganelemen L[2].

…Langkah N-1: Tentukan harga minimum di dalam

L[N-1,N]. Pertukarkan harga minimum denganelemen L[N-1].

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 20

procedure UrutMin_Menurun(input/output L: Larik, input N : integer)

Kamus LokalI : integer {pencacah untuk jumlah langkah}J : integer {pencacah untuk mencari nilai minimum}Imin : integer {indeks yang berisi nilai minimum sementara}Temp : integer {peubah bantu untuk pertukaran}

Algoritmafor I ← 1 to N-1 do

Imin ← Ifor J ← I+1 to N do

if L[J] < L[Imin] thenImin ← J

endifendfor{pertukarkan Maks dengan L[U]}Temp ← L[I]

L[I] ← L[Imin]L[Imin] ← Temp

endfor

Page 6: Pengurutan pada C++

6

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 21

Pengurutan Sisip (Insertion Sort)

Pengurutan sisip adalah metode pengurutandengan cara menyisipkan elemen larikpada posisi yang tepat. Pencarian posisiyang tepat dilakukan dengan melakukanpencarian beruntun di dalam larik. Selamapencarian posisi yang tepat dilakukanpergeseran elemen larik.

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 22

Pengurutan Sisip yang MenaikAndaikan: L[1] dianggap sudah pada tempatnyaLangkah 2: L[2] harus dicari tempatnya yang tepat pada L[1..2] dengan

cara menggeser elemen L[1..1] ke kanan (atau ke bawah, jika andamembayangkan larik terentang vertikal) bila L[1..1] lebih besardaripada L[2]. Misalkan posisi yang tepat adalah K. Sisipkan L[2] pada L[K].

Langkah 3: L[3] harus dicari tempatnya yang tepat pada L[1..3] dengancara menggeser elemen L[1..2] ke kanan (atau ke bawah) bilaL[1..2] lebih besar daripada L[3]. Misalkan posisi yang tepat adalahK. Sisipkan L[3] pada L[K].

…Langkah N: L[N] harus dicari tempatnya yang tepat pada L[1..N]

dengan cara menggeser elemen L[1..N-1] ke kanan (atau ke bawah) bila L[1..N-1] lebih besar daripada L[N]. Misalkan posisi yang tepatadalah K. Sisipkan L[N] pada L[K].

Hasil dari langkah N: Larik L[1..N] sudah terurut, yaitu L[1] ≤ … ≤ L[N]

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 23

procedure UrutSisip(input/output L: Larik, input N : integer)Kamus LokalK : integer {pencacah langkah}J : integer {pencacah untuk penelusuran larik}

Temp : integer {peubah bantu untuk agar L[K] tidak ditimpa selama pergeseran}

ALGORITMA{elemen L[1] dianggap sudah terurut}for K ← 2 to N do {mulai dari langkah 2 sampai langkah N}

Temp ← L[K] {ambil elemen L[K] supaya tidak ditimpa pergeseran}{cari posisi yang tepat untuk L[K] di dalam L[1..K-1] sambil menggeser}J ← K - 1while Temp ≤ L[J] AND (J > 1) do

L[J+1] ← L[J]J ← J-1

endwhileif Temp ≥ L[J] then

L[J+1] ← Tempelse

L[J+1] ← L[J]L[J] ← Temp

endifendfor

Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 24

procedure UrutSisip_Turun(input/output L: Larik, input N : integer)Kamus LokalK : integer {pencacah langkah}J : integer {pencacah untuk penelusuran larik}

Temp : integer {peubah bantu untuk agar L[K] tidak ditimpa selama pergeseran}

ALGORITMA{elemen L[1] dianggap sudah terurut}for K ← 2 to N do {mulai dari langkah 2 sampai langkah N}

Temp ← L[K] {ambil elemen L[K] supaya tidak ditimpa pergeseran}{cari posisi yang tepat untuk L[K] di dalam L[1..K-1] sambil menggeser}J ← K - 1while Temp ≥ L[J] AND (J > 1) do

L[J+1] ← L[J]J ← J-1

endwhile{Temp > L[J] or J = 1}if Temp ≤ L[J] then

L[J+1] ← Tempelse

L[J+1] ← L[J]L[J+1] ← Temp

endifendfor