Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. //Data nama utama, hanya bisa diubah secara manual oleh user (hanya dibaca saat pengurutan).
  7. string nama_mahasiswa[5];
  8. //deklarasi fungsi
  9. void bubbleSort(string *nama, int jumlah, bool isAscending);
  10. void selectionSort(string *nama, int jumlah, bool isAscending);
  11. void insertionSort(string *nama, int jumlah, bool isAscending);
  12. void dataBaru(string *nama, int jumlah);
  13. void printListNama(string *nama, int jumlah, string pesan);
  14.  
  15. //memindahkan data string pada dua index array(string arg1, string arg2)
  16. template <typename T>
  17. void balik(T& a, T& b) {
  18. T temp;
  19. temp = a;
  20. a = b;
  21. b = temp;
  22. }
  23.  
  24. int main() {
  25. //char nama[5][30], temp[30];
  26. char edit, sort='6';
  27. string nama[5];
  28. int jumlah = sizeof(nama) / sizeof(nama[5]);
  29.  
  30. //Nilai awal / default untuk test
  31. nama_mahasiswa[0] = "Badut Al Antomroh Rohmanto";
  32. nama_mahasiswa[1] = "Fredi Aelach Halah Mboh";
  33. nama_mahasiswa[2] = "Ratno Dutro Adja";
  34. nama_mahasiswa[3] = "Budie Hernandez";
  35. nama_mahasiswa[4] = "Ulul-Azmi Slankers";
  36. edit:
  37. system("cls");
  38. //List nama mahasiswa default
  39. printListNama(nama_mahasiswa, jumlah, " Nama mahasiswa saat ini : ");
  40.  
  41. //pilihan edit data, user memasukkan semua nama jika pilihan 'n'
  42. cout << "\n[!] Ketik 'O' lanjut atau 'N' input data baru : "; cin >> edit;
  43. switch (tolower(edit))
  44. {
  45. case 'o':
  46. case '0':
  47. goto next;
  48. break;
  49. case 'n':
  50. dataBaru(nama, jumlah);
  51. break;
  52. default:
  53. goto next;
  54. break;
  55. }
  56.  
  57. next:
  58. //menyalin data utama yang nilainya belum berubah
  59. for (int i = 0; i < jumlah; i++)
  60. nama[i] = nama_mahasiswa[i];
  61.  
  62. system("cls");
  63.  
  64. //menampilkan list nama sebelum disorting
  65. printListNama(nama, jumlah, "Nama mahasiswa sebelum disorting : ");
  66.  
  67. //pilihan menu
  68. switch (sort)
  69. {
  70. case '0':
  71. sort = '6';
  72. goto edit;
  73. break;
  74. case '1':
  75. bubbleSort(nama, jumlah, true);
  76. break;
  77. case '2':
  78. bubbleSort(nama, jumlah, false);
  79. break;
  80. case '3':
  81. selectionSort(nama, jumlah, true);
  82. break;
  83. case '4':
  84. selectionSort(nama, jumlah, false);
  85. break;
  86. case '5':
  87. insertionSort(nama, jumlah, true);
  88. break;
  89. case '6':
  90. insertionSort(nama, jumlah, false);
  91. break;
  92. default:
  93. system("cls");
  94. cout << "[!] Pilihan yang dimasukkan tidak tersedia\n"
  95. << "Silakan ulangi inputan" << endl;
  96. goto menu;
  97. break;
  98. }
  99.  
  100. //menampilkan list nama setelah disorting
  101. printListNama(nama, jumlah, "\nNama mahasiswa setelah disorting : ");
  102. menu:
  103. //menampilkan list pilihan menu yang tersedia dan inputannya
  104. cout << "\n\n================ MENU PENGURUTAN ================\n"
  105. << " 1. Bubble sort (Ascending)\n"
  106. << " 2. Bubble sort (Descending)\n"
  107. << " 3. Selection sort (Ascending)\n"
  108. << " 4. Selection sort (Descending)\n"
  109. << " 5. Insertion sort (Ascending)\n"
  110. << " 6. Insertion sort (Descending){ :default }\n"
  111. << "=============== 0 Input Data Baru ===============\n"
  112. << "Pilihan : "; cin >> sort;
  113. goto next;
  114. }
  115.  
  116. // 11.12.5800
  117.  
  118. void bubbleSort(string *nama, int jumlah, bool isAscending = true) {
  119. for (int i = 0; i < jumlah; i++)
  120. for (int j = 0; j < jumlah - 1 - i; j++)
  121. //nama[j] harus lebih besar dari nama[j+1] agar nilainya 1
  122. if (isAscending ? nama[j].compare(nama[j + 1]) > 0 : nama[j].compare(nama[j + 1]) < 0)
  123. balik(nama[j], nama[j + 1]);//menukar nilai string nama
  124. string apa = isAscending ? "Ascending" : "Descending";
  125. cout << "\n[!] Nama diurutkan menggunakan Bubble Sort ( "<<apa<<" ) " << endl;
  126. }
  127.  
  128. void selectionSort(string *nama, int jumlah, bool isAscending = true) {
  129. int belumDisorting = jumlah;//jumlah n index yang belum disorting
  130. for (int i = 0; i <jumlah; i++)
  131. {
  132. int maxmin = 0;
  133. for (int j = 0; j < belumDisorting; j++)
  134. //nama[j] harus lebih besar dari nama[max] agar nilainya 1
  135. if (isAscending ? nama[j].compare(nama[maxmin]) > 0 : nama[j].compare(nama[maxmin]) < 0)
  136. maxmin = j;
  137.  
  138. balik(nama[maxmin], nama[belumDisorting - 1]);
  139. belumDisorting--;
  140. }
  141. string apa = isAscending ? "Ascending" : "Descending";
  142. cout << "\n[!] Nama diurutkan menggunakan Selection Sort ( "<<apa<<" ) " << endl;
  143. }
  144.  
  145. void insertionSort(string *nama, int jumlah, bool isAscending = true) {
  146. string temp;
  147. for (int i = 0; i < jumlah; i++)
  148. {
  149. int n = i;
  150. //index pertama dianggap urut (n>0)
  151. //nama[n] harus lebih kecil/sama dengan nama[n-1]
  152. //agar nilainya lbh kecil/sama dgn 0
  153. while (n>0 && (isAscending ? nama[n].compare(nama[n - 1]) <= 0 : nama[n].compare(nama[n - 1]) >= 0))
  154. {
  155. balik(nama[n], nama[n - 1]);
  156. n--;
  157. }
  158. }
  159. string apa = isAscending ? "Ascending" : "Descending";
  160. cout << "\n[!] Nama diurutkan menggunakan Insertion Sort ( "<<apa<<" ) " << endl;
  161. }
  162.  
  163. //Mengubah semua data lama ke data baru yang diinputkan user(string arg ... arg-n, int jumlah)
  164. void dataBaru(string *nama, int jumlah) {
  165. cout << "\nMasukkan 5 nama teman anda :" << endl;
  166. for (int i = 0; i < jumlah; i++) {
  167. cout << "nama_mahasiswa[" << i << "] = "; cin >> nama_mahasiswa[i];
  168. }
  169. }
  170.  
  171. //menampilkan daftar nama
  172. void printListNama(string *nama, int jumlah, string pesan) {
  173. cout <<pesan << endl;
  174. for (int i = 0; i < jumlah; i++)
  175. cout << " " << i + 1 << ". " << nama[i] << endl;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement