Sorting
Pertemuan ke 14.
Sorting 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.
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 ber-indeks 0, dan elemen paling kanan adalah elemen berindeks 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 seterusnya.
Sorting: Bubble Sort.
Sorting: Bubble Sort.
Sorting: Bubble Sort.
Sorting: Bubble Sort.
Sorting: Bubble Sort.
Sorting: Bubble Sort. (1) (2) (3) (4) (5) (6)
void bubblesort(int arr[], int n) { //(Bubble ascending). int i,j; for(i=1;i
=i ; j--) //pembandingan antar elemen if(arr[j-1] > arr[j]) tukar(&arr[j],&arr[j-1]); }
(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].
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.
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 ditukar).
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.
Sorting: Selection Sort.
Sorting: Selection Sort.
Sorting: Selection Sort.
Sorting: Selection Sort.
Sorting: Selection Sort.
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]).
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]).
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)
Awal Proses
Awal proses
Tumpukan Kartu 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
5
1, 5, 8, 9, 10
8
-
Sorting: Insertion Sort.
Sorting: Insertion Sort.
Sorting: Insertion Sort.
Sorting: Insertion Sort.
Sorting: Insertion Sort.
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].
Sorting: Bubble, Insertion, Selection. (1) (2) (3) (4) (5) (6)
void bubblesort(int arr[], int n) { //(Bubble ascending). int i,j; for(i=1;i=i ; j--) //pembandingan antar elemen if(arr[j-1] > arr[j]) tukar(&arr[j],&arr[j-1]); } (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 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)}
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 } }
References : Thompson SN, 2009, Algoritma dan Struktur Data dengan C. Deitel, PJ, HM.Deitel, 2007, C How to Program, 5th Edition.