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 <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";
}
#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";
}
Sign up here with your email
ConversionConversion EmoticonEmoticon