Algoritma pengurutan internal yang utama antara lain :
- 1 Buble Sort
- 2. Selection Sort
- 3. Insertion Sort
- 4. Shell Sort
- 5. Merge Sort
- 6. Radix Sort
- 7. Quick Sort
- 8. Heap Sort
Namun hanya akan di bahas 3 metode sort karena ketiga metode tersebut yang dianggap mudah, yaitu : Buble Sort, Selection Sort, Insertion Sort.
1) 1. Buble Sort
Proses pengurutan yang sederhana dengan prinsip gelembung, maksudnya gelembung air yang mengapung untuk data yang terurut menaik (ascending) maka elemen bernilai kecil akan diapungkan (ke indeks terkecil), artinya diangkat ke atas (indeks terkecil) melalui pertukaran. Bekerja dengan berulang kali membandingkan dua elemen data dan akan menukar elemen data yang urutannya salah.
Contoh :
Pengurutan bilangan dari kecil ke besar
5 4 2 1 3
dari contoh diatas maka, program nanti akan mencari bilangan terkecil kemudian dibandingkan dan akhirnya bilangan terkecil tersebut nantinya diletakkan disebelah kiri, menjadi :
2 5 4 1 3
1 5 4 2 3
kemudian program akan mengerjakan pada indexs ke 2 dan itu akan dilakukan terus menerus hal yang sama seperti diatas hingga bilangan terkecil nanti berada di ujung sebelah kiri dan yang bilangan terbesar berada di ujung sebelah kanan.
Contoh :
Pengurutan bilangan dari kecil ke besar
5 4 2 1 3
dari contoh diatas maka, program nanti akan mencari bilangan terkecil kemudian dibandingkan dan akhirnya bilangan terkecil tersebut nantinya diletakkan disebelah kiri, menjadi :
2 5 4 1 3
1 5 4 2 3
kemudian program akan mengerjakan pada indexs ke 2 dan itu akan dilakukan terus menerus hal yang sama seperti diatas hingga bilangan terkecil nanti berada di ujung sebelah kiri dan yang bilangan terbesar berada di ujung sebelah kanan.
- Jika akan melakukan buble short menurun, maka program akan mencari bilangan terkecil terlebih dahulu, kemudian dibandingkan.
- Jika akan melakukan buble short menaik, maka program akan mencari bilangan terbesar terlebih dahulu, baru setelah itu membandingkannya.
Algoritma Buble Short secara Ascending
Kamus Data :
i, j, temp : integer
Algoritma
for ( i = 0 ; i <= ( N-2) ; i++)
for ( j = (N-1) ; j >= (i+1) ; j--)
if ( A[j-1] > A[j])
temp <- A[j-1]
A[j-1] <- A[j]
A[j] <- temp
endif
endfor
endfor
endprocedure
Program Algoritma Buble Short dengan Bahasa C
{ int L[5] ;
int i, N ;
//proses untuk memasukkan data array
printf ("Banyak data : ") ;
scanf (" %i ", &N);
for ( i=0; i<N; i++)
{ printf ("Data ke-%i : ", i+1);
scanf (" %i ", &L[i]); } //end loop i
//memanggil procedure buble short
//proses menampilkan kembali data array
printf ("\n Data array terurut \n");
for ( i=0; i<N ; i++)
{ printf ( " %3i ", L[i] ); };
getche ();
} //end program
{ int a, b, temp;
//proses sortir dengan buble short
for ( a=0; a <= (N-2); a++ )
{ for ("b = (N-1); b >= (a+1); b--)
{ if ( A [b-1] > A[b] ;
{ temp = A[b-1];
A[b-1] = A[b];
A[b] = temp; } //endif
} //end loop j
} //end loop if
} //end procedure
2. Selection Short
2. Selection Short
Algoritma selection short memiih elemen maksimum / minimum pada array, kemudian menempatkan elemen tersebut pada awal atau akhir tergantung pada urutannya ascending / descending. Selanjutnya elemen tersebut tidak disertakan pada proses selanjutnya. Jika array berukuran N, maka jumlah pass adalah ( N-1 ).
Terdapat 2 pendekatan dalam metode pengurutan dengan selection short, yaitu :
- Algoritma pengurutan maksimum ( maximum selection short) yaitu memilih elemen maksimum sebagai basis pengurutan
- Algoritma pengurutan minimum ( minimum selection short ) yaitu memilih elemen minimum sebagai basis pengurutan
- Maximum Selection Short Ascending
Untuk mendapatkan array yang terurut menaik, setiap pass pengurutan terdapat proses mencari harga maksimum dan proses pertukaran dua buah elemen array. Misal terdapat array L dengan N =5 buah elemen yang belum terurut, array akan diurutkan secara ascending dengan algoritma maximum selection short.
9 | 7 | 12 | 6 | 1 |
Pass 1:
- Cari elemen maksimum di dalam array L[0..4]. Maks L[2]=12
- Tukar maks dengan L[4], diperoleh
9 | 7 | 1 | 6 | 12 |
Pass 2:
- Berdasarkan urutan array pada pass 1, cari elemen maks di dalam array L[0..3]. Maks L[0]=9
- Tukar maks dengan L[3], diperoleh
6 | 7 | 1 | 9 | 12 |
Pass 3:
· Berdasarkan array pada pass2, cari elemen maks didalam array L[0..2]. Maks L[1]=7
· Tukar maks dengan L[2], diperoleh
6 | 1 | 7 | 9 | 12 |
Pass 4:
· Berdasarkan array pada pass 3, cari elemen maks didalam array L[0..1]. Maks L[0]=6
· Tukar maks dengan L[1], diperoleh
1 | 6 | 7 | 9 | 12 |
Selesai array L sudah terurut secara ascending.
Algoritma Maximum Selection Short secara Ascending:
KAMUS
maks,k,j,temp : integer
ALGORITMA
For (k=(N-1) ;k>=0 ; k<-k-1)
maks<-0
//cari elemen maks
For (j=0 ; j<=k : j<-j+1)
If (A[j] > A[maks])
maks<-j;
endif
endfor
v_Tukar (A[k] ,A[maks] ) //panggil procedure v_Tukar
endfor
endprocedure
Algoritma Maximum Selection Short Ascending Bahasa C:
main()
{ int L[5];
Int i,N;
//input data array
Printf(“banyak data : ”);
Scanf(“%i”, &N);
For(i=0 ; i<N ; i++)
{ printf(“data ke-%i : ”, i+1);
Scanf(“%i”, &L[i]); } //end loop 1
getche();
}
void v_SelaAsc(Int A[5], int N)
{ int maks,k,j,temp;
For(k=N-1); k>=0; k--)
{maks=0 ;
For (j=0; j<=k; j++)
{ if (A[j] >A[maks])
{maks=j; } //endif
} //end loop j
v_Tukar (&A[k] , &A[maks]);
} //end loop k
} //endprocedure v_SelAsc
void v_Tukar (int *P, int *M)
{ int temp;
temp= *P;
*P= *M;
*M=temp;
} //end procedure v_Tukar
- Maximum Selection Short Descending
9 | 8 | 11 | 7 | 12 |
Pass 1:
- Cari elemen maks didalam array L[0..4]. Maks=L[4]=12
- Tukar maks dengan L[0], diperoleh
12 | 8 | 11 | 7 | 9 |
Pass 2:
- Berdasarkan susunan array pass 1, cari elemen maks didalam array L[1..4]. Maks=L[2]=11
- Tukar maks dengan L[1], diperoleh
12 | 11 | 8 | 7 | 9 |
Pass 3:
- Berdasarkan susunan array pass 2, cari elemen maks didalam array L[2..4]. Maks=L[[4]=9
- Tukar maks dengan L[2], diperoleh
12 | 11 | 9 | 7 | 8 |
Pass 4:
- Berdasarkan susunan array pass3, cari elemen maks didalam array L[3..4]. Maks=L[4]=8
- Tukar maks dengan L[3], diperoleh
12 | 11 | 9 | 8 | 7 |
Selesai, array L sudah terurut secara descending (menurun).
Algoritma Maximum Selection Short secara Descending:
KAMUS:
k,maks,j,temp : integer
ALGORITMA
for(k=0; k<=(N-2); k<-k+1)
//cari elemen maksimum
maks<-k
for(j=k+1; j<=(N-1); j<-j+1)
if(A[j] > A[maks])
maks<-j
endif
endfor
temp <- A[k]
A[k] <- A[maks]
A[maks] <- temp
endfor
Algoritma Maximum Selection Short secara Descending Bahasa C:
#include <stdio.h>;
#include <conio.h>;
void v_Tukar (int *P, int *M);
void v_SelDsc(Int A[5], int N);
main()
{ int L[5];
int I,k,j,maks,temp,N;
printf(“banyak data : ”);
scanf(“%i”, &N);
//input data array
printf(“input data array\n”);
for(i=0; i<N; i++)
{ printf(“data ke-%i = ”, i+1);
scanf(“%i”, &L[i]); //end loop i
//panggil procedure v_SelDesc
v_SelDesc (L,N);
printf(“\noutput data array terurut: \n”);
for(i=0; i<N; i++)
{ printf(“%5i”, L[i]); } //end loop i
printf(“\ntekan enter…\n”);
getche();
} //end main program
void v_SelDsc(Int A[5], int N)
{ int k,maks,j,temp;
//proses sorting maks descending
for(k=0; k<=(N-2); k++)
{ //cari elemen maksimum
maks=k;
for(j=(k+1); j<=(N-1); j++)
{ if (A[j] > A[maks])
maks=j ; } //endfor loop j
v_Tukar (&A[k] , &A[maks]);
} //endfor loop k
} //endprocedure v_SelDesc
void v_Tukar (int *P, int *M)
{ int temp;
temp= *P;
*P= *M;
*M=temp;
} //end procedure v_Tukar
#include <conio.h>;
void v_minDesc(Int A[5], int N);
void v_Tukar (int *P, int *M);
main()
{ int L[5];
int i, N;
//input data array
printf(“input data array\n ”);
printf(“\nbanyak data : “);
scanf(“%i”, &N);
for(i=0 ; i<N ; i++)
{ printf(“data ke-%i : ”, i+1);
scanf(“%i”, &L[i]); } //end loop i
//panggil procedure v_minDesc
v_minDesc (L,N);
//output data array
printf(“\n data sortir: \n”);
for(i=0; i<N; i++)
{ printf(“%5i”, L[i]); } //end loop 1
printf(“\n tekan enter \n”);
getche();
} //end main program
void v_minDesc(Int A[5], int N)
{ int min,k,j,temp;
for(k=(N-1); k>=1; k--)
{min=0 ;
for (j=0; j<=k; j++)
{ if (A[j] >A[min])
{min=j; } //end loop j
v_Tukar (&A[k] , &A[min]);
} //end loop k
} //end procedure v_minDesc
void v_Tukar (int *P, int *M)
{ int temp;
temp= *P;
*P= *M;
*M = temp;
} //end procedure v_Tukar
1. Minimum Selection Short Ascending
Untuk mendapatkan array yang terurut menaik, setiap pass pengurutan terdapat proses mencari harga minimum dan proses pertukaran dua buah elemen array. Misal terdapat array L dengan N =5 buah elemen yang belum terurut, array akan diurutkan secara ascending dengan algoritma minimum selection short.
9 | 7 | 12 | 6 | 1 |
Pass 1:
- Cari elemen minimum di dalam array L[0..4]. Min L[4]=1
- Tukar min dengan L[0], diperoleh
1 | 7 | 12 | 6 | 9 |
Pass 2:
- Berdasarkan urutan array pada pass 1, cari elemen min di dalam array L[1..4]. Min L[3]=6
- Tukar min dengan L[1], diperoleh
1 | 6 | 12 | 7 | 9 |
Pass 3:
· Berdasarkan array pada pass2, cari elemen min didalam array L[2..4]. Min L[3]=7
· Tukar min dengan L[2], diperoleh
1 | 6 | 7 | 12 | 9 |
Pass 4:
· Berdasarkan array pada pass 3, cari elemen min didalam array L[3..4]. Min L[4]=9
· Tukar min dengan L[3], diperoleh
1 | 6 | 7 | 9 | 12 |
Selesai, array L sudah terurut secara ascending.
Algoritma Minimum Selection Short secara Ascending:
KAMUS
min,k,j,temp : integer
ALGORITMA
For (k=0; k<=(N-2); k<-k+1)
maks<-0
//cari elemen min
For (j=(k+1); j<=(N-1); j<-j+1)
If (A[j] > A[min])
min<-j;
endif
endfor
v_Tukar (A[k] ,A[min] )
endfor
Algoritma Minimum Selection Short Ascending Bahasa C:
#include <stdio.h>;
#include <conio.h>;
void v_minAsc(Int A[5], int N);
void v_Tukar (int *P, int *M);
main()
{ int L[5];
Int i,j,k,min,temp,N;
//input data array
printf(“input data array\n ”);
printf(“\nbanyak data : “);
scanf(“%i”, &N);
for(i=0 ; i<N ; i++)
{ printf(“data ke-%i : ”, i+1);
scanf(“%i”, &L[i]); } //end loop i
//panggil procedure v_minAsc
v_minAsc (L,N);
//output data array
printf(“\n data sortir: \n”);
for(i=0; i<N; i++)
{ printf(“%5i”, L[i]); } //end loop 1
printf(“\n tekan enter \n”);
getche();
} //end main program
void v_minAsc(Int A[5], int N)
{ int min,k,j,temp;
for(k=0; k<=(N-2); k++)
{min=k ;
for (j=(k+1); j<=(N-1); j++)
{ if (A[j] >A[min])
{min=j; } //end loop j
v_Tukar (&A[k] , &A[min]);
} //end loop k
} //end procedure
void v_Tukar (int *P, int *M)
{ int temp;
temp= *P;
*P= *M;
} //end procedure v_Tukar
2. Minimum Selection Short Descending
9 | 8 | 11 | 7 | 12 |
Pass 1:
- Cari elemen min didalam array L[0..4]. Min=L[3]=7
- Tukar min dengan L[4], diperoleh
9 | 8 | 11 | 12 | 7 |
Pass 2:
- Berdasarkan array pass 1,cari elemen min dalam array L[0..3].Min=L[1]=8
- Tukar min dengan L[3], diperoleh
9 | 12 | 11 | 8 | 7 |
Pass 3:
- Berdasarkan array pass 2, cari elemen min didalam array L[0..2]. Min=L[0]=9
- Tukar min dengan L[2], diperoleh
11 | 12 | 9 | 8 | 7 |
Pass 4:
- Berdasarkan array pass3, cari elemen min didalam array L[0..1]. Min=L[0]=11
- Tukar min dengan L[1], diperoleh
12 | 11 | 9 | 8 | 7 |
Selesai, array L sudah terurut secara descending (menurun).
Algoritma Minimum Selection Short secara Descending:
KAMUS:
k,min,j,temp : integer
ALGORITMA
for(k=(N-1); k>=1; k<-k-1)
min<-0
//cari nilai terkecil
for(j=0; j<=k; j<-j+1)
if(A[j] > A[min])
min<-j
endif
endfor
v_Tukar (A[k] , A[min]);
endfor
Algoritma Minimum Selection Short secara Descending Bahasa C:
#include <stdio.h>;
#include <conio.h>;
void v_minDesc(Int A[5], int N);
void v_Tukar (int *P, int *M);
main()
{ int L[5];
int i, N;
//input data array
printf(“input data array\n ”);
printf(“\nbanyak data : “);
scanf(“%i”, &N);
for(i=0 ; i<N ; i++)
{ printf(“data ke-%i : ”, i+1);
scanf(“%i”, &L[i]); } //end loop i
//panggil procedure v_minDesc
v_minDesc (L,N);
//output data array
printf(“\n data sortir: \n”)
for(i=0; i<N; i++)
{ printf(“%5i”, L[i]); } //end loop 1
printf(“\n tekan enter \n”);
getche();
} //end main program
void v_minDesc(Int A[5], int N)
{ int min,k,j,temp;
for(k=(N-1); k>=1; k--)
{min=0 ;
for (j=0; j<=k; j++)
{ if (A[j] >A[min])
{min=j; } //end loop j
v_Tukar (&A[k] , &A[min]);
} //end loop k
} //end procedure v_minDesc
void v_Tukar (int *P, int *M)
{ int temp;
temp= *P;
*P= *M;
*M = temp;
} //end procedure v_Tukar
Tidak ada komentar:
Posting Komentar