Tampilkan postingan dengan label Bab10. Tampilkan semua postingan
Tampilkan postingan dengan label Bab10. Tampilkan semua postingan

Rabu, 10 Januari 2018

Bab10 (Pengurutan Sorting)

   Seringkali perancang program perlu mengurutkan sekumpulan data yang
dimiliki untuk memudahkan pemrosesan selanjutnya terhadap data tersebut.
Pengurutan adalah sebuah algoritma dasar yang sering diperlukan dalam
pembuatan program. Berbagai algoritma pengurutan telah diciptakan dan
dapat digunakan. Pemahaman tentang beberapa algoritma pengurutan dasar
perlu diketahui, termasuk cara penggunaannya dalam program.

   1. Memahami konsep pengurutan
   2. Mengenal beberapa algoritma pengurutan
   3. Menerapkan algoritma pengurutan dalam program

   Pengertian Sort
Sorting atau pengurutan data adalah proses yang sering harus dilakukan
dalam pengolahan data. Sort dalam hal ini diartikan mengurutkan data yang
berada dalam suatu tempat penyimpanan, dengan urutan tertentu baik urut
menaik (ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urut
menurun (descending) dari nilai terbesar sampai dengan nilai terkecil. Sorting
adalah proses pengurutan.

Terdapat dua macam pengurutan:
⟹ Pengurutan internal (internal sort), yaitu pengurutan terhadap
      sekumpulan data yang disimpan dalam media internal komputer
      yang dapat diakses setiap elemennya secara langsung. Dapat
      dikatakan sebagai pengurutan tabel
⟹ Pengurutan eksternal (external sort), yaitu pengurutan data
      yang disimpan dalam memori sekunder, biasanya data bervolume
      besar sehingga tidak mampu untuk dimuat semuanya dalam memori.

Dalam courseware ini, hanya akan dibahas algoritma pengurutan internal,
dengan data berada dalam array satu dimensi.
Algoritma pengurutan internal yang utama antara lain:
    1. Bubble Sort
    2. Selection Sort
    3. Insertion Sort
    4. Shell Sort
    5. Merge Sort
    6. Radix Sort
    7. Quick Sort
    8. Heap Sort
Dalam courseware ini hanya akan dibahas tiga metode sort yang pertama yang
dianggap mudah, yaitu: Bubble Sort , Selection Sort dan Insertion Sort

   Bubble Sort
Bubble sort adalah proses pengurutan sederhana yang bekerja dengan
cara berulang kali membandingkan dua elemen data pada suatu saat dan
menukar elemen data yang urutannya salah. Ide dari Bubble sort adalah
gelembung air yang akan "mengapung" untuk table yang terurut menaik
(ascending). Elemen bernilai kecil akan "diapungkan" (ke indeks terkecil),
artinya diangkat ke "atas" (indeks terkecil) melalui pertukaran. Karena algoritma ini melakukan pengurutan dengan cara membandingkan elemen-
elemen data satu sama lain, maka bubble sort termasuk ke dalam jenis
algoritma comparison-based sorting.
Proses dalam Bubble sort dilakukan sebanyak N-1 langkah (pass) dengan N
adalah ukuran array. Pada akhir setiap langkah ke – I , array L[0..N] akan
terdiri atas dua bagian, yaitu bagian yang sudah terurut L[0..I] dan bagian
yang belum terurut L[I+1..N-1]. Setelah langkah terakhir, diperoleh
array L[0..N-1] yang terurut menaik.

Untuk mendapatkan urutan yang menaik, algoritmanya dapat ditulis secara
global sebagai berikut :
Untuk setiap pass ke – I = 0,1,.........., N-2 , lakukan :
Mulai dari elemen J = N-1, N-2,....., I + 1, lakukan :
   ➤ Bandingkan L[J-1] dengan L[J]
   ➤ Pertukarkan L[J-1] dengan L[J] jika L[J-1] > L[J]

Rincian setiap pass adalah sebagai berikut :

Pass 1: I = 0. Mulai dari elemen J = N-1,N–2,...,1, bandingkan
       L[J-1] dengan L[J]. Jika L[J-1] > L[J],
       pertukarkan L[J-1] dengan L[J]. Pada akhir langkah 1, elemen        L[0] berisi harga minimum pertama.

Pass 2: I = 1. Mulai dari elemen J = N-1,N–2,...,2, bandingkan
       L[J-1] dengan L[J]. Jika L[J-1] > L[J], pertukarkan L[J-
       1] dengan L[J]. Pada akhir langkah 2, elemen L[1] berisi
       harga minimum kedua dan array L[0..1] terurut, sedangkan
       L[2..(N-1)] belum terurut.

Pass 3: I = 2. Mulai dari elemen J = N-1,N–2,...,3, bandingkan
       L[J-1] dengan L[J]. Jika L[J-1] > L[J], pertukarkan L[J-
       1] dengan L[J]. Pada akhir langkah 3, elemen L[2] berisi
       harga minimum ketiga dan array L[0..2] terurut,
       sedangkan L[3..(N-1)] belum terurut.

Pass N-1: Mulai dari elemen J = N-1, bandingkan L[J-1] dengan
                 L[J]. Jika L[J-1] > L[J], pertukarkan L[J-1] dengan
                 L[J].


   Selection Sort
Algoritma Selection sort memilih elemen maksimum/minimum array,
lalu menempatkan elemen maksimum/minimum itu pada awal atau akhir array
(tergantung pada urutannya ascending/descending). Selanjutnya elemen
tersebut tidak disertakan pada proses selanjutnya. Karena setiap kali selection
sort harus membandingkan elemen-elemen data, algoritma ini termasuk dalam
comparison-based sorting.

Seperti pada algoritma Bubble Sort, proses memilih nilai maksimum /minimum
dilakukan pada setiap pass. Jika array berukuran N, maka jumlah pass adalah
N-1.
   Terdapat dua pendekatan dalam metode pengurutan dengan Selection Sort :
        1. Algoritma pengurutan maksimum (maximum selection sort),
            yaitu memilih elemen maksimum sebagai basis pengurutan.
        2. Algoritma pengurutan minimum (minimum selection sort), yaitu
            memilih elemen minimum sebagai basis pengurutan.

       
   Maximum Selection Sort Ascending
Untuk mendapatkan array yang terurut menaik (ascending), algoritma
maximum selection sort dapat ditulis sebagai berikut :
1. Jumlah Pass = N-1 (jumlah pass)
2. Untuk setiap pass ke – I = 0,1,....., jumlah pass lakukan :
⟹ cari elemen maksimum (maks) mulai dari elemen ke – I
sampai elemen ke – (N-1)
⟹ pertukarkan maks dengan elemen ke – I

⟹ kurangi N dengan satu

Rincian setiap pass adalah sebagai berikut :
Langkah 1 : Cari elemen maksimum di dalam L[0..(N-1)]

                    Pertukarkan elemen maksimum dengan elemen L[N-1]

Langkah 2 : Cari elemen maksimum di dalam L[0..N-2]
                    Pertukarkan elemen maksimum dengan elemen L[N-2]

Langkah 3 : Cari elemen maksimum di dalam L[0..N-3]
                   Pertukarkan elemen maksimum dengan elemen L[N-3]

..............
Langkah N-1: Tentukan elemen maksimum di dalam L[0..1]

                  Pertukarkan elemen maksimum dengan elemen L[0]

(elemen yang tersisa adalah L[0], tidak perlu diurut karena hanya satu-
satunya).

Jadi , pada 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 (menaik), dengan algoritma maximum
selection sort.

Berikut ini akan diberikan pseudocode procedure Maximum Selection Sort

  Ascending dan pseudocode procedure untuk tukar tempat.
Pseudocode Algoritma Maximum Selection Sort secara Ascending :
1. //prosedur algoritma Maximum Selection Sort secara Ascending
2. //I.S:arraysudah berisi nilai integeryang belum terurut
3. //F.S:nilai-nilai dalam arrayterurut secara Ascending
4. procedure v_SelAsc(input/output A:array[0..4]of integer,

input N:integer)

5. KAMUS:
6. maks,k,j,temp:integer
7. ALGORITMA:
8. for(k=(N-1);k>=0;kk-1)
9. maks⬅0;
10. // cari elemen maksimum
11. for(j=0;j<=k;jj+1)
12. if (A[j] > A[maks])
13. maks⬅j;
14. endif
15. endfor
16. v_Tukar(A[k],A[maks]) //panggil procedure v_Tukar
17. endfor
18.end procedure

   Pseudocode Algoritma Tukar Tempat :
1. //prosedur algoritma Tukar Tempat
2. //I.S:nilai-nilaiyang dikirimkan sudah terdefinisi sebelumnya
3. //F.S:nilaiyang dikirimkan tertukar nilainya
4. procedure v_Tukar(input/output P:integer,
input/output M:integer)

5. KAMUS:
6. temp:integer
7. ALGORITMA:
8. temp  P
9. P ⬅ M
10. M ⬅ temp
11.endprocedure

   Program lengkap penerapan algoritma Maximum Selection Sort Ascending dalam
   bahasa C:
#include <stdio.h>
#include <conio.h>
void v_SelAsc(int A[],int N);
void v_Tukar(int *P,int *M);
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 i
//memanggil procedure v_SelAsc
v_SelAsc(L,N);
//menampilkan kembali data array
printf("\nData Terurut:\n");
for(i=0;i<N;i++)
{ printf("%3i",L[i]); } //end loop i
getche();
}
void v_SelAsc(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
} //end procedure v_SelAsc
void v_Tukar(int *P,int *M)
{ int temp;
temp = *P;
*P = *M;
*M = temp;
} //end procedure v_Tukar

   Maximum Selection Sort Descending
Misal, terdapat array L dengan N = 5 buah elemen yang belum
terururt. Array akan diurutkan secara Descending (menurun), dengan
algoritma maximum selection sort:
1. //prosedur algoritma Maximum Selection Sort secara Descending
2. //I.S:arraysudah berisi nilai integeryang belum terurut
3. //F.S:nilai-nilai dalam arrayterurut secara Descending
4. procedure v_SelDesc(input/output A:array[0..4]of integer,
 input N:integer)

5. KAMUS:
6. k,maks,j,temp:integer
7. ALGORITMA:
8. for(k=0;k<=(N-2);k⬅k+1)
9. //cari elemen maksimum
10. maks⬅k
11. for(j=(k+1);j<=(N-1);j⬅j+1)
12. if (A[j] > A[maks])
13. maks⬅j
14. endif
15. endfor
16. temp⬅A[k]
17. A[k]⬅A[maks]
18. A[maks]⬅temp
19. endfor

Program lengkap penerapan algoritma Maximum Selection Sort Descending
dalam bahasa C:
1. #include <stdio.h>
2. #include <conio.h>
3. void v_Tukar(int *P,int *M);
4. void v_SelDesc(int A[5],int N);
5. main()
6. { int L[5];
7. int i,k,j,maks,temp,N;
8. printf("Banyak Data: ");scanf("%i",&N);
9. //input data array
10. printf("Input Data Array\n");
11. for(i=0;i<N;i++)
12. { printf("Data ke-%i = ",i+1);
13. scanf("%i",&L[i]); } //endloop i
14. //panggil procedure v_SelDesc
15. v_SelDesc(L,N);
16. printf("\nOutput Data Array Terurut:\n");
17. for(i=0;i<N;i++)
18. { printf(" %5i",L[i]); } //endloop i
19.
20. printf("\nTekan Enter...\n");
21. getche();
22. } //end main program
23.
24. void v_SelDesc(int A[5],int N)
25. { int k,maks,j,temp;
26. //proses sorting max descending
27. for(k=0;k<=(N-2);k++)
28. { //cari elemen maksimum
29. maks=k;
30. for(j=(k+1);j<=(N-1);j++)
31. { if (A[j] > A[maks])
32. maks=j; } //endfor loop j
33. v_Tukar(&A[k],&A[maks]);
34. } //endfor loop k
35. } //end procedure v_SelDesc
36.
37. void v_Tukar(int *P,int *M)
38. { int temp;
39. temp = *P;
40. *P = *M;
41. *M = temp;
42. } //end procedure v_Tukar

   Minimum Selection Sort Ascending
Untuk mendapatkan array yang terurut menaik (ascending), algoritma
minimum selection sort dapat ditulis sebagai berikut :
   1. Jumlah Pass = N-1 (jumlah pass)
   2. Untuk setiap pass ke – I = 0,1,....., N-1, lakukan :
         a. cari elemen minimum (min) mulai dari elemen ke – I
            sampai elemen ke – (N-1)
         b. pertukarkan min dengan elemen ke – I

Langkah 1 :  Cari elemen minimum di dalam L[0..(N-1)]  
                        Pertukarkan elemen terkecil dengan elemen L[0]
Langkah 2 : Cari elemen minimum di dalam L[1..(N-1)]
                       Pertukarkan elemen terkecil dengan elemen L[1]
Langkah 3 : Cari elemen minimum di dalam L[2..(N-1)]
                      Pertukarkan elemen terkecil dengan elemen L[2]
Langkah N-1: Tentukan elemen minimum di dalam L[(N-2)..(N-1)]
                          Pertukarkan elemen terkecil dengan elemen L[N-2]
                          (elemen yang tersisa adalah L[N-1], tidak perlu diurut karena
                          hanya satu-satunya).

Pseudocode Algoritma Minimum Selection Sort secara Ascending :
Pseudocode Algoritma Minimum Selection Sort secara Ascending :
1. //prosedur algoritma Minimum Selection Sort secara Ascending
2. //I.S:arraysudah berisi nilai integeryang belum terurut
3. //F.S:nilai-nilai dalam arrayterurut secara Ascending
4. procedure v_minAsc(input/output A:array[0..4]of integer,
 input N:integer)
5. KAMUS:
6. k,min,j,temp:integer
7. ALGORITMA:
8. for(k=0;k<=(N-2);k⬅k+1)
9. //cari elemen terkecil
10. min ⬅ k
11. for(j=(k+1);j<=(N-1);j⬅j+1)
12. if (A[j] < A[min])
14. endif
15. endfor
16. v_Tukar(A[k],A[min])
17.endfor
  
  Program lengkap penerapan algoritma Minimum Selection Sort Ascending dalam
  bahasa C:
1. #include <stdio.h>
2. #include <conio.h>
3. void v_minAsc(int A[5],int N);
4. void v_Tukar(int *P,int *M);
5. main()
6. { int L[5];
7. int i,j,k,min,temp,N;
8. //input data array
9. printf("Input Data Array\n");
10. printf("\nBanyak Data : "); scanf("%i",&N);
11. for(i=0;i<N;i++)
12. { printf(" Data ke-%i = ",i+1);
13. scanf("%i",&L[i]); } //end loop i
14. //panggil procedure v_minAsc
15. v_minAsc(L,N);
16. //output data array
17. printf("\n Data Sortir:\n");
18. for(i=0;i<N;i++)
19. { printf(" %5i",L[i]); } //end loop i
20. printf("\n Tekan Enter\n");
21. getche();
22. } //end main program
23.
24. void v_minAsc(int A[5],int N)
25. { int k,min,j,temp;
26. //proses minimum ascendingselection sort
27. for(k=0;k<=(N-2);k++)
28. { min = k;
29. for(j=(k+1);j<=(N-1);j++)
30. { if (A[j] < A[min])
31. min = j; } //endloop j
32. v_Tukar(&A[k],&A[min]); } //end loop k
33. } //end procedure
34.
35. void v_Tukar(int *P,int *M)
36. { int temp;
37. temp = *P;
38. *P = *M;
39. *M = temp;
40. } //end procedure v_Tukar

   Minimum Selection Sort Descending
Misal, terdapat array L dengan N = 5 buah elemen yang belum
terururt. Array akan diurutkan secara Descending (menurun), dengan
algoritma minimum selection sort.

   Pseudocode Algoritma Minimum Selection Sort secara Descending :
1. //prosedur algoritma Minimum Selection Sort secara Descending
2. //I.S:arraysudah berisi nilai integeryang belum terurut
3. //F.S:nilai-nilai dalam arrayterurut secara Descending
4. procedure v_minDesc(input/output A:array[0..4]of integer,

input N:integer)

5. KAMUS:
6. k,j,temp,min : integer
7. ALGORITMA:
8. //minimum selection sort descending
9. for(k=(N-1);k>=1;k⬅k-1)
10. min⬅0
11. //cari nilai terkecil
12. for(j=0;j<=k;j⬅j+1)
13. if (A[j] < A[min])
14. min⬅j
15. endif
16. endfor
17. v_Tukar(A[k],A[min])
20. endfor

  Program lengkap penerapan algoritma Minimum Selection Sort Descending
  dalam bahasa C:
1. #include <stdio.h>
2. #include <conio.h>
3. void v_minDesc(int A[5],int N);
4. void v_Tukar(int *P,int *M);
5. main()
6. { int L[5];
7. int i,N;
8. //input data array
9. printf("Input Data Array\n");
10. printf("\nBanyak Data : ");scanf("%i",&N);
11. for(i=0;i<N;i++)
12. { printf(" Data ke-%i = ",i+1);
13. scanf("%i",&L[i]); } //endloop i
14. //panggil procedure v_minDesc
15. v_minDesc(L,N);
16. //output data array
17. printf("\n Data Sortir:\n");
18. for(i=0;i<N;i++)
19. { printf(" %5i",L[i]); } //endloop i
20. printf("\n Tekan Enter...\n");
21. getche();
22. } //end main program
23.
24. void v_minDesc(int A[5],int N)
25. { int k,j,temp,min;
26. //minimum selection sort descending
27. for(k=(N-1);k>=1;k--)
28. { min = 0;
29. for(j=0;j<=k;j++)
30. { if (A[j] < A[min])
31. min=j; } //endloop j
32. v_Tukar(&A[k],&A[min]); } //endloop k
33. } //end procedure v_minDesc
34.
35. void v_Tukar(int *P,int *M)
36. { int temp;
37. temp = *P;
38. *P = *M;
39. *M = temp;
40. } //end procedure v_Tukar

   Insertion Sort
Insertion sort adalah sebuah algoritma pengurutan yang membandingkan
dua elemen data pertama, mengurutkannya, kemudian mengecek elemen data
berikutnya satu persatu dan membandingkannya dengan elemen data yang
telah diurutkan. Karena algoritma ini bekerja dengan membandingkan elemen-
elemen data yang akan diurutkan, algoritma ini termasuk pula dalam
comparison-based sort.
   Ide dasar dari algoritma Insertion Sort ini adalah mencari tempat yang
"tepat" untuk setiap elemen array, dengan cara sequential search. Proses ini
kemudian menyisipkan sebuah elemen array yang diproses ke tempatnya yang
seharusnya. Proses dilakukan sebanyak N-1 tahapan (dalam sorting disebut
sebagai "pass"), dengan indeks dimulai dari 0.
   Proses pengurutan dengan menggunakan algoritma Insertion Sort
dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data
ke-2 sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan
data yang lebih kecil maka data tersebut disisipkan ke depan sesuai dengan
posisi yang seharusnya.
   Misal terdapat array satu dimensi L, yang terdiri dari 7 elemen array
(n=7). Array L sudah berisi data seperti dibawah ini dan akan diurutkan
secara ascending dengan algoritma Insertion Sort.

  Pseudocode Algoritma Insertion Sort secara Ascending :
 1. //prosedur algoritma Insertion      Sort secara Ascending
 2. //I.S:arraysudah berisi nilai        integeryang belum terurut
3. //F.S:nilai-nilai dalam    arrayterurut secara Ascending
4. procedure v_inAsc(input/output A:array[0..6]of integer,
input N:integer)
5. KAMUS: 
6. k,X,i:integer
7. ALGORITMA:
8. //insertion sort ascending
9. k⬅1
10. while(k<=N-1)
11. i⬅k
12. X⬅A[i]
13. while(i>=1 && A[i-1]>X)
14. A[i]⬅A[i-1]
15. i⬅i-1
16. endwhile
17. A[i]⬅X
18. k⬅k+1
19. endwhile

   Program lengkap penerapan algoritma Insertion Sort Ascending
   dalam bahasa C:
#include <stdio.h>
#include <conio.h>
main()
{ int L[7];
int i,N;
void v_insertAsc(int A[7],int N);
//input data array
printf("Input Data Array\n");
printf("\nBanyak Data: "); scanf("%i",&N);
for(i=0;i<N;i++)
{ printf("Nilai ke-%i = ",i+1);
scanf("%i",&L[i]); } //end loop i
//panggil procedure v_inAsc
v_insAsc(L,N);
//output data array
printf("Data terurut:\n");
for(i=0;i<N;i++)
{ printf("%5i",L[i]); } //end loop i
printf("\nTekan Enter...\n");
getche();
}
void v_insAsc(int A[7],int N)
{ int k,X,i;
//insertion sort ascending
k=1;
while(k<=N-1)
{ i=k;
X=A[i];
while(i>=1 && A[i-1]>X)
{ A[i]=A[i-1];
i--; } //endwhile
A[i]=X;
k++; } //endwhile
} //end procedure
1. Proses Sorting merupakan proses mengurutkan data yang berada dalam
suatu tempat penyimpanan, dengan urutan tertentu baik urut menaik
(ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urut
menurun (descending) dari nilai terbesar sampai dengan nilai terkecil
2. Terdapat dua macam proses pengurutan, yaitu pengurutan internal
(internal sort) dan pengurutan eksternal (external sort).
3. Bubble sort adalah proses pengurutan sederhana yang bekerja dengan cara
berulang kali membandingkan dua elemen data pada suatu saat dan
menukar elemen data yang urutannya salah.
4. Algoritma Selection sort memilih elemen maksimum/minimum array, lalu
menempatkan elemen maksimum/minimum itu pada awal atau akhir array
(tergantung pada urutannya ascending/descending).
5. Algoritma Insertion Sort, mencari tempat yang "tepat" untuk setiap elemen
array, dengan cara sequential search. Proses ini kemudian menyisipkan
sebuah elemen array yang diproses ke tempatnya yang seharusnya.




~Sekian Terimakasih Semoga Bermanfaat~