• Tidak ada hasil yang ditemukan

Sorting. Pertemuan ke 14.

N/A
N/A
Protected

Academic year: 2021

Membagikan "Sorting. Pertemuan ke 14."

Copied!
29
0
0

Teks penuh

(1)

Sorting

(2)

Sorting adalah proses pengurutan data berdasarkan key tertentu. Misalkan untuk data mahasiswa, key nya adalah NIM

Kegunaan dari sorting adalah untuk mempercepat proses pencarian data (searching/retrieving).

Sorting bisa dilakukan secara ascending(menaik : 1,2,3,4,5) atau

descending(menurun: 5,4,3,2,1).

Berdasarkan lokasi yang digunakan untuk pengurutan, sorting dibedakan menjadi :

1. internal sorting : dilakukan untuk data yang berada didalam RAM

2. external sorting : sorting dimana sejumlah data berada pada RAM dan selebihnya di secondary storage device. External sorting dipakai jika jumlah data sangat besar sehingga RAM tidak dapat

menampung keseluruhan data.

(3)

Sorting: Bubble Sort.

Bubble = gelembung udara didalam air. Gelembung yang ringan (dalam hal ini kecil) akan naik ke atas.

proses:

Putaran akan dilakukan sebanyak n-1. dimana n adalah jumlah elemen yang akan diurutkan. Elemen disusun dari kiri ke kanan, dimana elemen paling kiri indeks 0, dan elemen paling kanan adalah elemen ber-indeks n-1.

Pada putaran ke-i, akan didapatkan elemen terkecil dan akan menempati posisi elemen ber-indeks i-1.

Pada setiap putaran dilakukan perbandingan data terakhir (n-1) dengan data sebelumnya (n-2), jika (n-1) < (n-2) maka tukarkan posisi kedua data tersebut. Proses yang sama dilakukan untuk (n-2) dan (n-3) demikian

(4)
(5)
(6)
(7)
(8)
(9)

Sorting: Bubble Sort.

(1) void bubblesort(int arr[], int n) { //(Bubble ascending).

(2) int i,j;

(3) for(i=1;i<n;i++) //putaran

(4) for(j=n-1 ; j>=i ; j--) //pembandingan antar elemen

(5) if(arr[j-1] > arr[j]) tukar(&arr[j],&arr[j-1]); (6) }

(1) Parameter berisi array yang akan diurutkan (arr) dan jumlah data didalam array (yaitu n)

(2) Definisi variabel untuk looping.

(3) Looping untuk berapa kali “putaran ke xx”. Jika n=6, maka putaran akan dilakukan sebanyak n-1 (5 kali).

(4) Untuk setiap “putaran ke xx”, akan dilakukan banding-tukar antar elemen. Looping ini dilakukan mulai dari elemen PALING KANAN (j, yaitu n-1)

dibandingkan dengan elemen sebelumnya(j-1, yaitu n-2). Begitu seterusnya sampai ketemu elemen yang sudah terurut (j=i, yaitu “putaran ke xx” ) .

(5) Jika elemen j-1(satu elemen dikiri j) > dari elemen j, maka tukar elemen array pada indeks [j-1] dengan [j].

(10)

Sorting: Selection Sort.

Proses selection sort (ascending):

Untuk n buah elemen data yang akan diurutkan, elemen paling kiri berindeks 0, elemen paling kanan berindeks n-1.

1) dibagi dalam n-1 putaran, untuk jumlah data n.

Pada putaran pertama : dipilih elemen terkecil dan diletakkan pada posisi paling kiri, yaitu diposisi indeks 0.

Pada putaran kedua : dipilih elemen terkecil kedua dan diletakkan pada posisi kedua dari kiri, yaitu diposisi indeks 1.

Pada putaran ke-i : dipilih elemen terkecil ke-i dan diletakkan pada posisi ke-i dari kiri, yaitu diposisi indeks i-1.

(11)

Sorting: Selection Sort.

2) (untuk mencari nilai terkecil) dalam setiap putaran dilakukan perbandingan dengan elemen yang lain.

Pada putaran ke-1, catat elemen terkecil di indeks 0. Bandingkan

elemen pada indeks 0 dengan elemen pada indeks 1,2,…,n-1. Jika ada elemen yang lebih kecil, catat indeksnya

Pada putaran ke-2, catat elemen terkecil di indeks 1. Bandingkan

elemen pada indeks 1 dengan elemen pada indeks 2,…,n-1. Jika ada elemen yang lebih kecil, catat indeksnya

Pada putaran ke-i, catat elemen terkecil di indeks i-1. Bandingkan

elemen pada indeks i-1 dengan elemen pada indeks i,…,n-1. Jika ada elemen yang lebih kecil, catat indeksnya

(pada bubble sort, elemen data yang dipertukarkan, di Selection, baru mencatat indeksnya saja, pada akhir putaran baru elemen data

(12)

Sorting: Selection Sort.

3) pada awal putaran ke-i, dicatat indeks elemen terkecil adalah i-1. Jika pada akhir putaran indek elemen terkecil yang dicatat tidak sama dengan i-1, maka datanya baru dipertukarkan.

Selection sort hanya melakukan pertukaran data satu kali di setiap akhir putaran.

(13)
(14)
(15)
(16)
(17)
(18)

Sorting: Selection Sort.

(1) void selectionsort(int arr[], int n){ (2) int i,j,temp;

(3) for ( i = 0 ; i < n-1 ; i++){

(4) temp = i; //temp untuk catat indeks elm terkecil

(5) for(j = i+1; j < n; j++)

(6) if(arr[j] < arr[temp]) temp = j;

(7) if( temp != i) tukar(&arr[temp],&arr[i]); }

}

(1) SelectionSort menerima 2 parameter : array yang berisi data yang akan di sort dan n adalah jumlah data yang berada didalam array.

(2) Definisi variable untuk looping dan temp

(3) Loop untuk jumlah putaran (yaitu sejumlah n-1)

(4) Catat nilai i pada temp; digunakan sebagai indek awal dari elemen data terkecil. (5) (6) Loop ini digunakan untuk membandingkan data dari indek awal (temp) dengan data-data pada indeks berikutnya. Jika ada data yang lebih kecil, catat indeksnya (yaitu j) kedalam temp.

(7) Jika loop (5)(6) selesai dan indeks pada temp sudah bergeser dari nilai

originalnya (temp=i), maka data yang ada di temp (data[temp]) akan ditukar dengan data yang ada di indeks i (yaitu data[i]).

(19)

Sorting: Selection Sort.

(1) void selectionsort(int arr[], int n){ (2) int i,j,temp;

(3) for ( i = 1 ; i < n ; i++){

(4) temp = i-1; //temp untuk catat indeks elm terkecil

(5) for(j = i; j < n; j++)

(6) if(arr[j] < arr[temp]) temp = j;

(7) if( temp != i-1) tukar(&arr[temp],&arr[i-1]); }

}

(1) SelectionSort menerima 2 parameter : array yang berisi data yang akan di sort dan n adalah jumlah data yang berada didalam array.

(2) Definisi variable untuk looping dan temp

(3) Loop untuk jumlah putaran (yaitu sejumlah n-1)

(4) Catat nilai i pada temp; digunakan sebagai indek awal dari elemen data terkecil. (5) (6) Loop ini digunakan untuk membandingkan data dari indek awal (temp) dengan data-data pada indeks berikutnya. Jika ada data yang lebih kecil, catat indeksnya (yaitu j) kedalam temp.

(7) Jika loop (5)(6) selesai dan indeks pada temp sudah bergeser dari nilai

originalnya (temp=i), maka data yang ada di temp (data[temp]) akan ditukar dengan data yang ada di indeks i (yaitu data[i]).

(20)

Sorting: Insertion Sort.

Cara kerja insertion sort mirip dengan proses pengurutan kartu.

Anggap setumpuk kartu untuk satu jenis (Heart) sebagai data yang acak yang akan diurutkan.

Tangan kiri anda sebagai tempat untuk data yang urut, tangan kanan anda akan mengambil satu data dari tumpukan kartu.

Misalkan tumpukan kartu berisi 9, 5, 10, 1 ,8 dianggap sebagai data awal yang akan diurutkan

Step Tangan Kiri

(Data yg sudah terurut)

Tangan Kanan (Temp)

Tumpukan Kartu

Awal Proses Awal proses Data awal : 9, 5, 10, 1 ,8

1 9 9 5, 10, 1 ,8

2 5, 9 5 10, 1 ,8

3 5, 9, 10 10 1, 8

4 1, 5, 9, 10 1 8

(21)
(22)
(23)
(24)
(25)
(26)

Sorting: Insertion Sort.

(1) void insertionsort(int arr[], int n) { (2) int i,j,temp;

(3) for (i = 1; i < n; i++) { (4) temp = arr[i];

(5) j = i-1;

(6) while (j >= 0 && temp < arr[j]) { (7) arr[j+1] = arr[j]; (8) j = j-1; (9) } (10) arr[j+1] = temp; (11) } (12)}

(1) InsertionSort menerima 2 parameter : data yang akan di sort dalam bentuk array (arr) dan jumlah data yang ada di dalam arr tersebut (n).

(2) Variabel untuk looping i,j dan menampung temporary (temp)

(3) Loop untuk jumlah putaran; Jika data n maka jumlah putarannya n-1.

(4) Data yang ada di posisi indek ke-i (arr[i]) disimpan ke temp. temp digunakan sebagai pembanding dengan data dalam array.

(5) Loop dari posisi sebelum indek ke-i ke kiri DAN data dari arr[j] harus lebih besar dari temp (6) Geser posisi data j ke posisi j+1

(7) Jika keluar dari loop karena j >= 0 atau arr[j] sudah lebih kecil dari temp maka insert nilai temp ke posisi array (arr[j+1].

(27)

Sorting: Bubble, Insertion, Selection.

(1) void insertionsort(int arr[], int n) { (2) int i,j,temp;

(3) for (i = 1; i < n; i++) { (4) temp = arr[i];

(5) j = i-1;

(6) while (j >= 0 && temp < arr[j]) { (7) arr[j+1] = arr[j]; (8) j = j-1; (9) } (10) arr[j+1] = temp; (11) } (12)}

(1) void selectionsort(int arr[], int n){ (2) int i,j,temp;

(3) for ( i = 1 ; i < n ; i++){

(4) temp = i-1; //temp untuk catat indeks elm terkecil

(5) for(j = i; j < n; j++)

(6) if(arr[j] < arr[temp]) temp = j;

(7) if( temp != i-1) tukar(&arr[temp],&arr[i-1]); }

}

(1) void bubblesort(int arr[], int n) { //(Bubble ascending).

(2) int i,j;

(3) for(i=1;i<n;i++) //putaran

(4) for(j=n-1 ; j>=i ; j--) //pembandingan antar elemen

(5) if(arr[j-1] > arr[j]) tukar(&arr[j],&arr[j-1]); (6) }

(28)

BUBBLE FLAG

void bubblesort(struct takad data[], int n) {

int i, j, terurut;

for (i = 0; i < n - 1; i++) {

terurut = 1;

// set nilai awal

for (j = n - 1; j > i ; j--)

if (data[j].ipk < data[j-1].ipk) {

tukar (&data[j], &data[j-1]);

terurut = 0

; // ubah nilai

}

if (terurut == 1) break;

// periksa nilai

}

}

(29)

References :

Thompson SN, 2009, Algoritma dan Struktur Data dengan C. Deitel, PJ, HM.Deitel, 2007, C How to Program, 5th Edition.

Referensi

Dokumen terkait

1) Tekan tombol pada panel instrument ke posisi “ON” untuk menghidupkan Mixer. 2) Lihat arah putaran pedal mixer, shaft kanan berputar searah jarum jam dan shaft kiri

Setelah elemen terbesar ditempatkan pada posisi elemen terbawah, maka elemen-elemen tabel yang belum terurut adalah dari elemen ke-1 sampai elemen ke( N-1). Diperinci dengan

Apabila [A][X]=[B] maka dengan menyusun matriks baru yaitu matriks [A.B] akan didapat matriks berorde (n, n+1) dimana matriks baru tersebut dikenai transformasi elementer

1. Kedua

Berdasarkan simulasi 1 dan 2 dapat disimpulkan bahwa pemilihan matrik Q berbentuk diagonal dengan elemen matrik dipilih nol untuk yang berhubungan dengan parameter posisi

Berdasarkan simulasi 1 dan 2 dapat disimpulkan bahwa pemilihan matrik Q berbentuk diagonal dengan elemen matrik dipilih nol untuk yang berhubungan dengan parameter posisi

Desain pengambilan sampel sistematis meliputi menarik tiap elemen ke-n dalam populasi yang dimulai dengan elemen yang dipilih secara acak antara 1 dan n. satu hal yang perlu diingat

● Median Data Tunggal Mencari median data tunggal cukup sederhana, yakni tinggal mengurutkan data tersebut dari terkecil ke terbesar, kemudian posisi median dicari dengan rumus Me =