Source Code Program Marge Sort Ascending dan Descending

Source Code Program Marge Sort Ascending dan Descending

Algoritma Marge sort berjalan dengan cara membagi 2 setiap urutan bilangan sampai menghasilkan pambagian 2 dengan hasil 1. 

setelah melakukan pembagian 2 angka kemudian angka tersebut dibandingan dengan angka ke 1 dan angka ke 2. maka angka yang terkecil berada disebelah kiri dan angka yang terbesar berada di sebelah kanan. 

1. Ascending

Mengurutkan nilai dari yang terkecil kenilai yang terbesar, dan berikut merupakan source code marge sort secara ascending.

#include <iostream>
#include <chrono>
using namespace std;
void Merge(int *a, int low, int high, int mid)
{
int i, j, k, temp[high-low+1];
i = low;
k = 0;
j = mid + 1;

while (i <= mid && j <= high)
{
if (a[i] < a[j])
{
temp[k] = a[i];
k++;
i++;
}
else
{
temp[k] = a[j];
k++;
j++;
}
}

while (i <= mid)
{
temp[k] = a[i];
k++;
i++;
}

while (j <= high)
{
temp[k] = a[j];
k++;
j++;
}

for (i = low; i <= high; i++)
{
a[i] = temp[i-low];
}
}

void MergeSort(int *a, int low, int high)
{
int mid;
if (low < high)
{
mid=(low+high)/2;
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);
Merge(a, low, high, mid);
}
}

int main()
{
int n=10;
int arr[n] = {84,87,78,16,94,36,87,93,50,22};
auto start = chrono::high_resolution_clock::now();
MergeSort(arr, 0, n-1);
auto finish = chrono::high_resolution_clock::now();
    cout << "Running Time : " << chrono::duration_cast<chrono::nanoseconds>(finish-start).count() << " nanoSeconds\n";
}



2. Descending

Mengurutkan nilai dari yang terbesar kenilai yang terkecil, dan berikut merupakan source code marge sort secara descending.

#include <iostream>
#include <chrono>
using namespace std;
void Merge(int *a, int low, int high, int mid)
{
int i, j, k, temp[high-low+1];
i = low;
k = 0;
j = mid + 1;

while (i <= mid && j <= high)
{
if (a[i] < a[j])
{
temp[k] = a[i];
k++;
i++;
}
else
{
temp[k] = a[j];
k++;
j++;
}
}

while (i <= mid)
{
temp[k] = a[i];
k++;
i++;
}

while (j <= high)
{
temp[k] = a[j];
k++;
j++;
}

for (i = low; i <= high; i++)
{
a[i] = temp[i-low];
}
}

void MergeSort(int *a, int low, int high)
{
int mid;
if (low > high)
{
mid=(low+high)/2;
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);
Merge(a, low, high, mid);
}
}

int main()
{
int n=10;
int arr[n] = {84,87,78,16,94,36,87,93,50,22};
auto start = chrono::high_resolution_clock::now();
MergeSort(arr, 0, n-1);
auto finish = chrono::high_resolution_clock::now();
    cout << "Running Time : " << chrono::duration_cast<chrono::nanoseconds>(finish-start).count() << " nanoSeconds\n";
}
Previous
Next Post »