Anda di halaman 1dari 8

Tugas 2

Struktur Data

NAMA: Y Firman Putra Adrian

NIM: 044813483
1. Buatlah coding pengurutan data dari terkecil hingga terbesar dari data berikut (a1,
a2, a3, a4, a5, a6) tentukan sendiri nilai a1 sampai a6. Urutkan dengan menggunakan
algoritma Merge-sort? Kemudian anda analisa kinerja algoritma tersebut
Jawab :
class MergeSort {

public static void MergeSort (int n[], int l, int r) {


int left = l;
int right = r;
if (left >= right)
{
return;
}

int middle = (left+right)/2;


MergeSort (n, left, middle);
MergeSort (n, middle+1, right);
int end_left = middle;
int start_right = middle +1;
while ((left <= end_left) && (start_right <= right))
{
if (n [left] < n [start_right])
{
left++;
}
else
{
int Temp = n[start_right] ;
for (int k = start_right - 1; k >= left; k--) {
n[k+1] = n[k];

}
n [left] = Temp;
left++;
start_right++;

}
}

}
public static void main(String [] args){
int n [] = {19,4,7,20,15,11};
System.out.print("\nurutan angka awal sebelum Pengurutan ");

for (int i = 0; i < n.length; i++) {


System.out.print(n[i]+ " ");
}
MergeSort.MergeSort(n, 0, n.length -1);
System.out.println("\nurutan angka setelah diproses");
for(int i = 0; i < n.length; i++){
System.out.print(n[i]+" ");
}

}
}

analisa kinerja algoritma Mergesort


Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide
and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian
kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian
dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus
satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali
untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok. Setelah itu
digabungkan kembali dengan membandingkan pada blok yang sama apakah data
pertama lebih besar daripada data ke-tengah+1, jika ya maka data ke-tengah+1
dipindah sebagai data pertama, kemudian data ke-pertama sampai ke-tengah
digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai
menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan
metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.

2. Buatlah coding pengurutan data dari terkecil hingga terbesar dari data berikut (a1,
a2, a3, a4, a5, a6) tentukan sendiri nilai a1 sampai a6. Urutkan dengan menggunakan
algoritma Counting-sort? Kemudian anda analisa kinerja algoritma tersebut?
class CountingSort {
void sort (int arr[]) {

int n = arr.length;
int output [] = new int [n];
int count [] = new int [256];
for(int i = 0; i < 256; ++i)
count[i] = 0;
for (int i = 0; i < 256; ++i)
count[i] = 0;
for( int i = 0; i < n; ++i)
++count[arr[i]];
for (int i = 1; i < 255; i++)
count[i] += count[i-1];
for(int i = 0; i < n; ++i)
{
output[count[arr[i]]-1] = arr[i];
--count[arr[i]];
}
System.arraycopy(output, 0, arr, 0, n);
}
public static void main(String args[]) {
CountingSort ob = new CountingSort ();
int arr[] = {2,10,15,6,25,1};
System.out.println("\nAngka Sebelum Di urutkan");
for(int i =0; i < arr.length; i++)
System.out.print(arr[i]+" ");
ob.sort(arr);
System.out.print("\nAngka Setelah Di Proses Di urutkan");
for(int i = 0; i < arr.length; i++)
System.out.print(arr[i]+" ");

}
}
kinerja algoritma Counting sort

Counting sort adalah algoritma pengurutan yang mengurutkan elemen array dengan
menghitung jumlah kemunculan setiap elemen unik dalam array. Hitungan disimpan
dalam larik bantu dan pengurutan dilakukan dengan memetakan hitungan sebagai
indeks larik bantu.

Cara kerja alagoritma countingsort

1. Temukan elemen maksimum dari array yang diberikan.

2. Inisialisasi countArray[] dengan panjang max+1 dengan semua elemen sebagai 0 .


Array ini akan digunakan untuk menyimpan kemunculan elemen-elemen array input.

3. - Di countArray[] , simpan jumlah setiap elemen unik dari array input pada
indeksnya masing-masing.
- Misalnya: Jumlah elemen 2 dalam array input adalah 2. Jadi, simpan 2 pada indeks 2
di countArray[] . Demikian pula diatas , jumlah elemen 5 dalam larik masukan adalah
1 , maka simpan 1 pada indeks 5 di countArray[]

4. Simpan jumlah kumulatif atau jumlah awalan elemen countArray[] dengan


melakukan countArray[i] = countArray[i – 1] + countArray[i]. Ini akan membantu
dalam menempatkan elemen array masukan pada indeks yang benar dalam array
keluara

5. Temukan indeks setiap elemen array asli dalam array hitungan. Ini memberikan
jumlah kumulatif. Tempatkan elemen pada indeks yang dihitung seperti yang
ditunjukkan pada gambar di bawah.

5. Setelah menempatkan setiap elemen pada posisi yang benar, kurangi hitungannya
satu per satu.

Untuk video pemnuatan tugas 2 ada di link yotube dibawah. Terimakasih


https://youtu.be/p8A60YFVdzE

Anda mungkin juga menyukai