Anda di halaman 1dari 8

Metode Bubble sort Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan cara melakukan penukaran data

dengan tepat di sebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat. Contoh program
1. #include <stdio.h> 2. #include <conio.h> 3. 4. 5. 6. main() { int A[5]; int i,k,j,temp,maks,a,N; Program ini menggunakan bahasa C, oleh karena itu library nya menggunakan stdio.h. Conio.h berfungsi sebagai library dari perintah getche pada baris 26. Di dalam fungsi utama (baris 3) didefinisikan bahwa ada sebuah array bernama A (baris 4) dengan anggota sejumlah 5 buah. Selain itu, didefinisikan pula beberapa variabel seperti pd baris 6. Lalu terdapat sebuah subfungsi tampil yang nantinya baru akan dijelaskan isinya pada baris 28. Baris 8 dan 9 berfungsi untuk memasukkan jumlah angka yang ingin diurutkan. Baris 10-12 berfungsi untuk memasukkan angka angka yang ingin diurutkan sebanyak yang diinginkan pada baris 9 tadi. Angka angka ini kemudian akan disimpan dalam array A dengan indeks 0-(N-1). Baris 14 23 berguna untuk menukar data sehingga menjadi suatu urutan dengan membandingkan setiap angka yang telah dimasukkan. Baris 14 menjelaskan bahwa akan dilakukan perulangan perbandingan sebanyak jumlah angka yang dimasukkan. Angka angka tersebut kemudian dibandingkan dari urutan yang paling awal dimasukkan (angka dengan indeks array 0) hingga angka dengan indeks array N-1. Jika nilai array tersebut lebih besar dari nilai angka array dengan indeks maks, maka nilai maks diganti dengan nilai j. Perulangan berlanjut begitu seterusnya hingga semua angka telah dibandingkan. Baris 20-22 sepahamku cman buat menukar data doang , nilai A[k] jadi A[maks]. Prosesnya aku bngung gimana pokok ntar menghasilkan urutan data dari yang kecil ampe gedhe (ascending). Baris 25 memanggil subfungsi tampil dengan parameter array A dan nilai N (jumlah angka). Di dalam subfungsi ini (baris 28-39) berisi cara

7. void tampil(int A[5],int N); 8. printf("Masukkan Jumlah Data : "); 9. scanf("%i",&N); 10. for(i=0;i<N;i++) 11. { printf(" Masukkan Data ke-%i = ",i+1); 12. scanf("%i",&A[i]); } 13. printf("\n"); 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. for(k=(N-1);k>0;k--) { maks=0; for(j=0;j<=k;j++) { if (A[j] > A[maks]) { maks=j; } } temp = A[k]; A[k] = A[maks]; A[maks] = temp; }

24. printf("\nData Selesai Di sort\n"); 25. tampil(A,N); 26. getche(); 27. } 28. void tampil(int A[5],int N) 29. { int i,j; 30. printf("Urutan secara Ascending");

31. for(i=0;i<N;i++) 32. { printf("%5i",A[i]); } 33. 34. 35. 36. 37. printf("\nUrutan secara Descending"); for(i=N-1;i>=0;i--) { printf("%5i",A[i]); }

Kalo yang dimaksud bapaknya bikin descending bukan mencetaknya aja yang dibalik berarti ntar tinggal ganti tanda > di baris 17 jadi < ntar fungsinya berubah jadi ngurutin dari besar ke kecil. Jangan lupa ket baris 30 n 33 diganti.

38. printf("\nSorting Selesai\n"); 39. }

Metode Selection sort Memindahkan elemen dengan cara membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen terakhir . Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar dan begitu seterusnya. Proses pengurutan menggunakan metode selection sort secara terurut nik adalah sebagai berikut: 1. Mencari data terkecil dari data pertama sampai dengan data yang terakhir. kemudian ditukar posisinya dengan data pertama. 2. Mencari data terkecil dari data kedua sampai dengan data terakhir, kemudian ditukar posisinya dengan data kedua. 3. Mencari data terkecil dari data ketiga sam[ai data terakhir, kemudian ditukar posisimya dengan data ketiga. 4. Begitu seterusnya sampai semua data terurut naik. Apabila terdapat n buah data yang akan diurutkan, maka membutuhkan (n-1) langkah pengurutan, dengan data terakhir, yaitu data ke n tidak perlu diurutkan karena hanya tinggal data satu-satunya. Contoh program
1. #include "conio.h" 2. #include "stdio.h" 3. int main() { 4. 5. 6. 7. 8. int i, j, iMin; int n, Urut; int Tmp, code; int Arr[100]; do {

Metode ini sebenere sama ae kayak yang pertama cuman cara membandingkannya aja yang beda. Urutan kerjanya aku agak bingung ngejelasinnya tapi tak jelasin sepahamku aja.

Program yang ini lebih jelas soalnya langsung ada pilihan ascending ato descending. Intinya 9. printf("=====================================\n"); sama aja programnya.

10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.

Intinya di perulangan yang baris 27- 46 dan baris 57-76 (kalo gak printf("| Pilihan Program Sorting |\n"); printf("=====================================\n"); salah) setiap angka yang dimasukkan akan dibandingkan printf("| 1. Selection Sorting (Ascending) |\n"); dengan angka angka di printf("| 2. Selection Sorting (Descending) |\n"); printf("| 3. Keluar . . . |\n"); belakangnya. Misal angka angka printf("=====================================\n\n"); yang dimasukkan adalah 4,7,2 printf("Masukan Pilihan Anda : "); berarti awalnya angka 4 scanf("%d", &code); dibandingkan dulu dengan angka 7 switch (code) { trus dengan angka 2. Kalo yang ascending, kalo ditemukan angka case 1 : printf("\nInputkan banyak data yang akan diurutkan : "); yang lebih kecil, angka tersebut scanf("%i", &n); langsung dipindah untuk Urut = 1; menggantikan angka yang for(i = 0; i < n; i++) { dibandingkan. Dari contoh yang printf("Masukan data ke %i : ", i + 1); takkasi (4,7,2) berarti ntar angka scanf("%i", &Arr[i]); dua tukar tempat sama angka 4. } for(i = 0; i < n - 1; i++) { Kalo udah ntar gantian angka 7 iMin = i; yang dibandingin dengan angka for(j = Urut; j < n; j++) { yang sebelah kanannya. Tadi kan if(Arr[j] < Arr[iMin]) { angka 2 udah tukar tempat sama iMin = j; angka 4, berarti angka 7 if(Arr[i] != Arr[iMin]) { dibandingkan dengan angka 4. Tmp = Arr[i]; Karna 4 lebih kecil berarti dia tukar if(Arr[i] > Arr[iMin]) { Arr[i] = Arr[iMin]; tempat lagi dengan angka 7. Arr[iMin] = Tmp; Selanjutnya,karena udah gada lagi } yang dibandingkan berarti } perulangan selesai. Angka angka } yang kita masukkan pun sudah } terurut dengan baik. Urut = Urut + 1; } Yang descending bedanya cuma printf("\nSetelah Pengurutan\n"); for(i = 0; i < n; i++) { dicari angka yang lebih gedhe. printf("Elemen ke %i : %i\n", i + 1, Arr[i]); Sama kayak yang ascending, kalo } ditemukan angka yang lebih gedhe getch(); berarti ntar tuker tempat tempat break; sampai akhirnya ndak ada lagi yang dibandingkan. case 2 : printf("\nInputkan banyak data yang akan diurutkan : "); scanf("%i", &n); Urut = 1; for(i = 0; i < n; i++) { printf("Masukan data ke %i : ", i + 1); scanf("%i", &Arr[i]); } for(i = 0; i < n - 1; i++) {

58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.

iMin = i; for(j = Urut; j < n; j++) { if(Arr[j] > Arr[iMin]) { iMin = j; if(Arr[i] != Arr[iMin]) { Tmp = Arr[i]; if(Arr[i] < Arr[iMin]) { Arr[i] = Arr[iMin]; Arr[iMin] = Tmp; } } } } Urut = Urut + 1; } printf("\nSetelah Pengurutan\n"); for(i = 0; i < n; i++) { printf("Elemen ke %i : %i\n", i + 1, Arr[i]); } getch(); break;

79. default : { 80. printf("\nSilahkan Tekan Enter Untuk Keluar . . . "); }} 81. } while(code >=1 && code <= 2); 82. getch(); 83. }

Metode insertion sort Metode insertion sort merupakan sebuah algoritma pengurutan yang membandingkan dua elemen data pertama kemudian mengurutkan lalu mengecek elemen data berikutnya satu persatu dan membandingkan dengan data yang telah diurutkan. Proses nya sebagai berikut; Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila ditemukan data yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan pada posisi yang sesuai. Akan lebih mudah apabila membayangkan pengurutan kartu. Pertama-tama anda meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di sebelah kiri, maka ambil kartu tersebut dan sisipkan di tempat yang sesuai. Contoh program

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.

#include <iostream.h> #include <conio.h> int data[10],data2[10]; int n,i; void insertion_sort() { int temp,i,j; for(i=1;i<=n;i++) { temp = data[i]; j = i -1; while(data[j]>temp && j>=0) { data[j+1] = data[j]; j--; } data[j+1] = temp; } }

Sama kayak yang selection sort aku ndak terlalu paham jalannya gimana program yang ini. taktulisin yang kupahami aja dari ngambil dari teorinya.

Pengurutan yang ini kayak gabungan antara yang pertama n yang kedua. Bedanya setiap kali abis dibandingin, angka angka yang memenuhi syarat langsung ditukar posisinya. Kalo yang buble kan pokok kalo ketemu yang lebih gedhe dia disimpen dulu, trus masih nerusin perulangan ampe selese. Baru ntar kalo ketemu yang paling gedhe baru dituker tempatnya. Lha kalo yang ini, jika yang dibandingin ada yang lebih besar,dia langsung ditukar taruh 20. int main() 21. { sebelah kanannya. Misal angka 8, 22. cout<<" PROGRAM INSERTION SORT"<<endl; 5,3. Pertama angka 8 dibandingkan 23. cout<<"___________________________"<<endl; dengan 5. Karena 8 lebih besar dari 24. cout<<"Masukkan Jumlah Data : "; 5 berarti 8 tukar tempat dengan 5 25. cin>>n; jadi urutannya berubah jadi 5,8,3. 26. cout<<"___________________________\n"; Selanjutnya 8 dibanding dengan 3. 27. for(int i=1;i<=n;i++) 28. { Karna lebih gedhe 8 berarti ditukar 29. cout<<"Masukkan data ke "<<i<<" : "; lagi jadi 5,3,8. Ini belum berakhir 30. cin>>data[i]; karena proses dimulai lagi dari kiri 31. data2[i]=data[i]; sampai menemukan urutan yang 32. } tepat. Sekilas caranya hampir sama 33. insertion_sort(); 34. cout<<"_________________________________________\n"; dengan metode selection, bedanya 35. cout<<"Data Setelah di Sort : "; di metode ini kalo dianalogikan 36. for(i=1; i<=n; i++) kayak merambat dari kiri ke kanan. 37. { Data 1 dibanding data 2, data dua 38. cout<<" "<<data[i]; dibanding data 3 dan 39. getch(); seterusnya.kalo yang metode 40. } selection kan loncat loncat. Data 1 41. } dibanding data 2, data satu dibanding data 3 dan seterusnya ampe data terakhir. Hasilnya sama aja ntar jadi sebuah urutan ascending angka angka yang dimasukkan. Perulangan untuk melakukan pembandingan tempat dan penukaran diletakkan di subfungsi

Sequential Pencarian beruntun (Sequential) adalah proses membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa. Sequential adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu. Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk pencarian data sangat sebentar (minimal). Sedangkan kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan untuk pencarian data sangat lama (maksimal). Contoh program
1. #include <iostream.h> 2. #include <conio.h> 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. int main() { int i; int cari,ketemu; int A[100] ; cout<<"PROGRAM SEARCHING\n"; cout<<"masukkan 7 buah data : \n\n"; for (i=1;i<=7;i++) { cout<<"masukkan data ke-"<<i<<endl; cin>>A[i] ; } cout<<endl; cout<<"Input bilangan yang dicari : "; cin>>cari; ketemu=0; for(i=0;i<=7;i++) { if (A[i]==cari) { ketemu=1; cout<<"\nData ditemukan pada indeks ke-"<<i; } } Program ini fungsinya buat cari informasi letak suatu data dalam array. Kalo sesuai listing programmu,awalnya kita memberi masukan angka sebanyak 7 buah (baris 10-14). Trus ntar kita masukkan angka berapa yang pengen kita cari nomor indeksnya (baris 16-17). Variabel ketemu fungsinya Cuma buat penanda aja kalo angka yang dicari ketemu atau ndak. Perulangan di baris 19 26 fungsinya buat nyari angka yang diinginkan pada setiap indeks data array yang kita isikan tadi. Pencarian dimulai dari indeks terkecil sampai yang terbesar (indeks 0-7). Jika pada suatu indeks angkanya sama dengan yang kita cari, variabel ketemu berubah jadi 1 nilainya, trus ntar nomor indeksnya dicetak. Meski udah ketemu, perulangan untuk mencari angka akan tetap dilakukan karena buat jaga jaga kalo misal ada angka trsebut 2 kali dimasukkan. Lha kalo ternyata sama sekali ndak ketemu berarti variabel ketemu memenuhi syarat percabangan baris 27-29 sehingga dicetak kalimat data

27. if (ketemu==0){ 28. cout<<"Data tidak ditemukan"; 29. }

30. getch(); 31. }

Binary search
Digunakan untuk mencari sebuah data pada himpunan data-data yang tersusub secara urut. yaitu data yang telah di urutkan dari besar ke kecil atau sebaliknya .proses dilaksanakan pertama kali pada bagian tengah dari elemen himpunan,jika data yang di cari ternyata kurang dari elemen bagian atasnya maka pencarian dilakukan dari bagian tengah ke bawah. Contoh program 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. #include<stdio.h> #include<conio.h> int main() { //deklarasi variabel int A[10], i,j,k,tkr,top,bottom,middle,tm; //proses penginputan data for(i=0;i<10;i++) { printf("Data ke-%d:",i+1); scanf("%d",&A[i]); } printf("Masukkan data yang akan anda cari:"); scanf("%d",&k); getchar(); //proses pengurutan data for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if (A[i]>A[j]) { tkr=A[i]; A[i]=A[j]; A[j]=tkr; } } } //proses pencarian data tm=0; top=9; bottom=0; while(top>=bottom) { middle=(top+bottom)/2; if(A[middle]==k) { tm++; Program ini pake bahasa C. Gak seperti yang sequential tadi, fungsinya program yang ini cuman pengen ngecek aja apakah angka yang kita cari ada dalam array. Sama seperti sebelumnya, disini kita masukin dulu angka angka yang disimpan dalam array. Menurut programmu ini angka yang dimasukkan ada 10 biji (baris 8). Setelah itu kita masukkan angka yang pengen kita cek itu ( baris 13-14). Lha di sini angka angka tadi kita urutin dulu sebelum dicari. Kalo gak salah ngurutinnya pake yang buble sort dh ( baris 17-28). Trus setelah diurutin, baru dimulai pencarian. Bedanya menurut teori kalo di sini program akan memisahkan angka angka yang ada dalam array menjadi 2 bagian. Angka ini dipecah dengan batasan tengah adalah angka dengan indeks tengah makanya di baris 35 ada operasi kayak gitu.lha setelah itu baru deh dicek. Diceknya pake perulangan dengan syarat kayak di baris 33. Kalo misalnya angka yang berindeks middle sama dengan angka yang dicari, maka ntar nilai variabel tmakan ditambah 1. Kalo ternyata bukan, maka dicek lagi di percabangan berikutnya (baris 40-47). Di situ maksudnya adalah jika ternyata angka yang ada di indeks middlelebih kecil dari yang dicari,

39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.

} if(A[middle]<k) { bottom=middle+1; } else { top=middle-1; } } if (tm>0) { printf("Data %d yang dicari ada dalam array\n",k); getchar(); } //jika tidak ditemukan else { printf("Data tidak ditemukan dalam array\n"); getchar(); } }

Dari perulangan itu nantinya, setiap kali angka yang dicari ditemukan, berarti nilai variabel tm akan terus bertambah. Proses selanjutnya yakni pernyataan apakah angka ditemukan atau tidak. Kalo tm bertambah berarti data ditemukan, kalo tidak berarti sebaliknya.

Anda mungkin juga menyukai