Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- // By : Dian Nugraha -> 1112091000081
- void Merge(int* ipA, int iEnd1, int iEnd2) {
- int i = 0;
- int j = iEnd1;
- int k = 0;
- int* ipTemp = new int[iEnd2];
- // Ambil setiap elemen terkecil berikutnya
- while (i < iEnd1 && j < iEnd2) {
- if (ipA[i] < ipA[j]) {
- ipTemp[k] = ipA[i];
- ++i;
- } else {
- ipTemp[k] = ipA[j];
- ++j;
- }
- ++k;
- }
- // Menyalin setiap elemen yang tersisa dari array 1
- while (i < iEnd1) {
- ipTemp[k] = ipA[i];
- ++i;
- ++k;
- }
- // Menyalin setiap elemen yang tersisa dari 2 Array
- while (j < iEnd2) {
- ipTemp[k] = ipA[j];
- ++j;
- ++k;
- }
- // Salin array bergabung kembali dengan aslinya
- for (int iIndex = 0; iIndex < iEnd2; ++iIndex) {
- ipA[iIndex] = ipTemp[iIndex];
- }
- delete [] ipTemp;
- }
- int main() {
- using namespace std;
- cout<< "\t MERGE SORT \n\n";
- int iaArray[] = {22,10, 15, 3, 8,2};
- int iSize = 6;
- // Proses Pengurutan dengan Merge Sort
- for (int i = 1; i < iSize; i *= 2) {
- for (int j = 0; j < iSize - i; j += 2*i) { //1. Kelompokan deret bilangan kedalam 2 bagian, 4 bagian, 8 bagian, ......dst ? (2n)
- int iEnd2 = (2*i < iSize - j) ? 2*i : iSize - j;
- Merge(&(iaArray[j]), i, iEnd2);
- }
- }
- cout<<"Data yang akan di urut \t: 22 10 15 3 8 2\n";
- // Output dari Merge sort dalam array
- cout<<"Data yang telah di urut : ";
- for (int i = 0; i < iSize; i++){
- cout << iaArray[i] << " ";
- }
- cout << endl;
- getch();
- return 0;
- }
- // By : Dian Nugraha -> 1112091000081
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement