Pengurutan (Sorting)

Download Report

Transcript Pengurutan (Sorting)

Pengurutan (Sorting)
• Diperlukan untuk mempercepat pencaharian suatu target
dalam suatu daftar (list).
Jenis Pengurutan:
 Ascending
• Pengurutan dilakukan mulai dari nilai terkecil menuju
nilai terbesar
 Descending
• Pengurutan dilakukan mulai dari nilai terbesar menuju
nilai terkecil.
Teknik Pengurutan:
Sederhana :
 Selection sort
 Bubble sort
 Insertion sort
 Lanjut :
 Quick Sort
 Merge Sort
Selection:
Algoritma:
for(i=0; i<=N-2;i++){
/* N=Banyak data dlm daftar */
for(j=i;j<=N-1;j++){
/* Tentukan index dari data terkecil antara A[j]
s/d A[N-1], dan simpan di variabel k.
Kemudian tukar A[i] dengan A[k]. */
}
}
Baca Data
519
Data Pertama
419
Tukarkan
127
69
381
Data Terkecil
Selection:
Algoritma:
for(i=0; i<=N-2;i++){
/* N=Banyak data dlm daftar */
for(j=i;j<=N-1;j++){
/* Tentukan index dari data terkecil antara A[j]
s/d A[N-1], dan simpan di variabel k.
Kemudian tukar A[i] dengan A[k]. */
}
}
519
69
419
419
Data Pertama
Tukarkan
Baca Data
127
127
69
519
381
381
Data Terkecil
Selection:
Algoritma:
for(i=0; i<=N-2;i++){
/* N=Banyak data dlm daftar */
for(j=i;j<=N-1;j++){
/* Tentukan index dari data terkecil antara A[j]
s/d A[N-1], dan simpan di variabel k.
Kemudian tukar A[i] dengan A[k]. */
}
}
519
69
69
419
419
127
127
127
419
Data Pertama
69
519
519
Tukarkan
381
381
381
Baca Data
Data Terkecil
Selection:
Algoritma:
for(i=0; i<=N-2;i++){
/* N=Banyak data dlm daftar */
for(j=i;j<=N-1;j++){
/* Tentukan index dari data terkecil antara A[j]
s/d A[N-1], dan simpan di variabel k.
Kemudian tukar A[i] dengan A[k]. */
}
}
Baca Data
519
69
69
69
419
419
127
127
127
127
419
381
69
519
519
519
Data Pertama
Tukarkan
381
381
381
419
Data Terkecil
Selection:
Algoritma:
for(i=0; i<=N-2;i++){
/* N=Banyak data dlm daftar */
for(j=i;j<=N-1;j++){
/* Tentukan index dari data terkecil antara A[j]
s/d A[N-1], dan simpan di variabel k.
Kemudian tukar A[i] dengan A[k]. */
}
}
519
69
69
69
69
419
419
127
127
127
127
127
419
381
381
69
519
519
519
419
381
381
381
419
519
Data Terakhir
Berhenti
/* Fungsi-fungsi pada Selection Sort */
#include <stdio.h>
#define Maxint 32767
void Cari_Min(int *Arr, int mulai, int akhir,int *k) {
int min,i;
min = Maxint;
for (i=mulai; i<=akhir;i++){
if (Arr[i] < min){
min = Arr[i];
*k = i;
}
}
}
void Tukar(int *x, int *y) {
int z ;
z = *x;
*x = *y;
*y = z;
}
void Selection(int *Arr, int n)
{
int i,k;
for(i=0;i<=n-2;i++){
Cari_Min(Arr,i,n-1,&k);
Tukar(&Arr[i],&Arr[k]);
}
}
/* Program Utama */
void main()
{
int DataArr[] = {519,419,127,69,381};
int i;
for(i=0; i<5; i++) printf(“%d
”,DataArr[i]);
printf(“\n”);
Selection(DataArr,5);
for(i=0; i<5; i++) printf(“%d
”,DataArr[i]);
printf(“\n”);
}
Bubble (Exchange)
519
519
519
519
69
419
419
419
69
519
127
127
69
419
419
69
69
127
127
127
381
381
381
381
381
69
69
69
69
519
519
519
127
419
419
127
519
127
127
419
419
381
381
381
381
Pola Pergerakan Elemen
Pada Putaran Pertama
Pola Pergerakan Elemen
Pada Putaran Kedua
69
69
69
127
127
127
519
519
381
419
381
519
381
419
419
Pola Pergerakan Elemen Pada
Putaran Ketiga
69
69
69
127
127
127
381
381
381
519
419
419
419
519
519
Putaran Keempat
Terakhir
void Bubble(int *DataArr, int n)
{
int i,j;
for (i=1; i<n; i++)
for (j=n-1; j>=i; j--)
if (DataArr[j-1] > DataArr[j])
Tukar(&DataArr[j-1],&DataArr[j]);
}
• Bila data telah terurut, procedure diatas berlaku ‘bodoh’,
yaitu tetap melakukan pembandingan.
• Perbaikan secara sederhana, yaitu menambah : ‘flag’ yang
memberitahu, bila pada suatu putaran data telah terurut.
void Bubble_Flag(int *Arr, int n)
{
int i,j;
int urut;
/* Flag */
urut = 0;
i = 1;
while ((i < n) && (!urut)) {
urut = 1;
for (j=n-1; j>=i; j--) {
if (Arr[j-1] > Arr[j]){
Tukar (&Arr[j-1], &Arr[j]);
urut = 0;
}
}
i = i + 1;
}
}
Latihan : Buat main program untuk memanggil fungsi
buble_flag diatas.