Anda di halaman 1dari 29

LAPORAN PRAKTIKUM

STRUKTUR DATA
Pertemuan ke-5

Disusun oleh

Nama : Rizqulloh Rifqi Edwanto


NIM : 195410188
Kelas : TI-4
Jurusan : Informatika
Jenjang : SI

Sekolah Tinggi Management Informatika


Komputer AKAKOM Yogyakarta
2020/2021
PENGELOLAAN DATA PADA ARRAY/ LARIK:
PENGURUTAN (SORTING)

BAB I
PENDAHULUAN
A. TUJUAN
Mahasiswa dapat melakukan pengurutan terhadap suatu data yang terdapat di
dalam larik

BAB II
PENJELASAN
B. DASAR TEORI
Sorting (Pengurutan)
Sorting (pengurutan) merupakan konsep/ algoritma yang sering
digunakan. Jika berhubungan dengan jumlah data yang besar, data akan mudah
dikelola jika sudah terurut. Algoritma pengurutan melibatkan beberapa konsep-
konsep dasar pemograman, yaitu:
• Urutan/Sequence. Kaidah pemrograman yang menyatakan bahwa
perintahperintah dalam program komputer akan dieksekusi menurut
urutannya dari atas ke bawah
• Seleksi/Selection. Perintah-perintah dalam program komputer akan
dieksekusi berdasarkan nilai kebenaran boolean tertentu.
• Perulangan/Loop. Sejumlah perintah dalam program komputer yang akan
dieksekusi beberapa kali berdasarkan nilai kebenaran boolean-nya

Sorting dapat dibuat dengan dua model, yatu Ascending dan Descending.
Ascending yaitu melakukan pengurutan dari data yang terkecil ke data yang lebih
besar. Contoh : 1, 2, 3, . . . ,10.
Descending yaitu melakukan pengurutan dari data yang terbesar ke data yang
lebih kecil. Contoh: 10, 9, 8, . . . , 1.
Ada beberapa metode sorting, misalnya :
• Bubble Sort
• Selection Sort
• Insertion Sort
• Quick Sort
• MergeSort
• dan lainnya
Pada praktikum ini kita akan mempelajari teknik sorting bubble sort,
selection Sort dan Insertion Sort

C. PRAKTIK
Praktek 1

Eksekusi program untuk melakukan pengurutan data secara Bubblesort.


Program
import java.util.Scanner;
class formatBiodata{
//bagian deklarasi struktur record
String nama;
String alamat;
int umur;
char jekel;
float ipk;
}
class praktik1{
public static int N=5;
//bagian entri data ke dalam struktur larik
static void ngentriData(formatBiodata biodataMahasiswa[]){
Scanner masukan = new Scanner(System.in);
int bacaTombol=0;

for(int i=0; i<=N-1; i++){


System.out.print("Silahkan masukkan nama anda : ");
biodataMahasiswa[i].nama = masukan.next();

System.out.print("Silahkan masukkan alamat anda : ");


biodataMahasiswa[i].alamat = masukan.next();

System.out.print("Silahkan masukkan umur anda : ");


biodataMahasiswa[i].umur = masukan.nextInt();

System.out.print("Silahkan masukkan Jenis Kelamin anda : ");


try{
bacaTombol = System.in.read();
}
catch(java.io.IOException e)
{
}
biodataMahasiswa[i].jekel = (char)bacaTombol;
System.out.print("Silahkan masukkan IPK anda : ");
biodataMahasiswa[i].ipk = masukan.nextFloat();
System.out.println("");
}
}

//Fungsi untuk Mencari Data Secara Binary Search dan Hapus


public static void mencariDanHapusDataBiner(formatBiodata biodataMahasiswa[]) {
String kataKunci;
int lokasi = -1;
boolean statusKetemu = false;
// bagian memasukkan kata kunci
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan kata kunci pencarian : ");
kataKunci = masukan.next();
// bagian mencari data satu persatu urut dari larik terdepan
int atas, bawah, tengah;
atas = 0;
bawah = N - 1;
tengah = (atas + bawah) / 2;
while ((statusKetemu == false) && (bawah - atas != 1)) {
System.out.println(biodataMahasiswa[tengah].nama + " <---> " + kataKunci);
// jika kataKunci < biodataMahasiswa[tengah].nama)
if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) < 0) {
bawah = tengah;
tengah = (atas + bawah) / 2;
}
// jika kataKunci > biodataMahasiswa[tengah].nama)
else if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) > 0) {
atas = tengah;
tengah = (atas + bawah) / 2;
} else {
statusKetemu = true;
lokasi = tengah;
}
}
if (statusKetemu == true) {
System.out.println("Data yang anda cari KETEMU di larik ke :" + lokasi);
// menghapus data yang ketemu
for (int i = lokasi; i <= N - 2; i++) {
biodataMahasiswa[i] = biodataMahasiswa[i + 1];
}
System.out.println("Proses menghapus data ke-" + lokasi + " selesai.");

// memperbarui banyaknya data (N), banyaknya data berkuran satu.....


N--;
} else {
System.out.println("maap, nama yang anda cari tidak ditemukan ");
}
}

//Fungsi untuk mengurutkan data(BubbleSort)


public static void mengurutkanDataBubble(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan BubbleSort");
formatBiodata biodataSementara = new formatBiodata();
int indeksTerakhir = N-1;
for(int j=0; j<=indeksTerakhir-1; j++){
for(int i=0; i<=indeksTerakhir-1-j; i++){
//perintah dibawah ini identik dengan if(nama[i]>nama[i+1])
if (biodataMahasiswa[i].nama.compareTo
(biodataMahasiswa[i+1].nama) > 0){
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[i+1];
biodataMahasiswa[i+1] = biodataSementara;
}
}
}
}

//Fungsi untuk menampilkan data


public static void tampilkanData(formatBiodata biodataMahasiswa[]){
System.out.println("----------------------------------------------------");
System.out.println("\tNAMA\t\tALAMAT\t\tUMUR\tJEKEL\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(i +".\t");
System.out.print (biodataMahasiswa[i].nama+"\t\t");
System.out.print (biodataMahasiswa[i].alamat+"\t");
System.out.print (biodataMahasiswa[i].umur+"\t");
System.out.print (biodataMahasiswa[i].jekel+"\t");
System.out.println(biodataMahasiswa[i].ipk+"\t");
}
System.out.println("----------------------------------------------------");
}
//Program utama
public static void main(String[] args){
formatBiodata biodataMahasiswa[] = new formatBiodata[5];
biodataMahasiswa[0] = new formatBiodata();
biodataMahasiswa[1] = new formatBiodata();
biodataMahasiswa[2] = new formatBiodata();
biodataMahasiswa[3] = new formatBiodata();
biodataMahasiswa[4] = new formatBiodata();
ngentriData(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mencari data secara biner


mencariDanHapusDataBiner(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataBubble
mengurutkanDataBubble(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

}
}

Penjelasan:
Algoritma bubble sort akan membandingkan sebuah elemen dengan
elemen di sebelah kanannya. Jika elemen yang dibaca lebih besar dari elemen di
sebelah kanannya maka kedua elemen tersebut harus ditukar (untuk kasus
Ascending). Proses ”banding-tukar” ini akan dilakukan mulai dari elemen pertama
(data paling kiri) hingga elemen terakhir (data paling kanan) sebagai satu buah
siklus. Pada akhir siklus yang pertama akan diperoleh hasil berupa kondisi di
mana data yang paling besar berada di posisi paling kanan.
Pada siklus berikutnya, proses ”banding-tukar” akan dilakukan lakukan
lagi untuk mendapatkan data terbesar kedua untuk diletakkan di posisi kedua dari
kanan. Kemudian siklus akan diulang kembali untuk ketiga kalinya, keempat
kalinya, kelima kalinya demikian seterusnya hingga diperoleh data terbesar
ketiga, keempat, kelima, dan seterusnya. Keberlangsungan siklus baru akan
berhenti apabila seluruh data terurutkan.
Dalam program diatas fungsi algoritma bubblesort ada di baris ke 86 s/d
101. Hasil output program diatas akan seperti berikut

Output

Penjelasan output :
Dalam output tersebut, ketika kita
selesai memasukkan/input
nama,alamat,umur,jekel dan IPK
tampilan selanjutnya muncul
tampilan pencarian biner kata kunci
mana yang akan dicari, setelah sudah
ketemu, maka muncul fungsi
pengurutan secara bubblesort yang
dimana pengurutan nama dari A-Z.
Praktik 2
Eksekusi master program untuk melakukan pengurutan data secara SelecionSort.
Program

import java.util.Scanner;
class formatBiodata{
//bagian deklarasi struktur record
String nama;
String alamat;
int umur;
char jekel;
float ipk;
}
class praktik2{
public static int N=5;
//bagian entri data ke dalam struktur larik
static void ngentriData(formatBiodata biodataMahasiswa[]){
Scanner masukan = new Scanner(System.in);
int bacaTombol=0;

for(int i=0; i<=N-1; i++){


System.out.print("Silahkan masukkan nama anda : ");
biodataMahasiswa[i].nama = masukan.next();

System.out.print("Silahkan masukkan alamat anda : ");


biodataMahasiswa[i].alamat = masukan.next();

System.out.print("Silahkan masukkan umur anda : ");


biodataMahasiswa[i].umur = masukan.nextInt();

System.out.print("Silahkan masukkan Jenis Kelamin anda : ");


try{
bacaTombol = System.in.read();
}
catch(java.io.IOException e)
{
}
biodataMahasiswa[i].jekel = (char)bacaTombol;
System.out.print("Silahkan masukkan IPK anda : ");
biodataMahasiswa[i].ipk = masukan.nextFloat();
System.out.println("");
}
}

//Fungsi untuk Mencari Data Secara Binary Search dan Hapus


public static void mencariDanHapusDataBiner(formatBiodata biodataMahasiswa[]) {
String kataKunci;
int lokasi = -1;
boolean statusKetemu = false;
// bagian memasukkan kata kunci
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan kata kunci pencarian : ");
kataKunci = masukan.next();
// bagian mencari data satu persatu urut dari larik terdepan
int atas, bawah, tengah;
atas = 0;
bawah = N - 1;
tengah = (atas + bawah) / 2;
while ((statusKetemu == false) && (bawah - atas != 1)) {
System.out.println(biodataMahasiswa[tengah].nama + " <---> " + kataKunci);
// jika kataKunci < biodataMahasiswa[tengah].nama)
if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) < 0) {
bawah = tengah;
tengah = (atas + bawah) / 2;
}
// jika kataKunci > biodataMahasiswa[tengah].nama)
else if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) > 0) {
atas = tengah;
tengah = (atas + bawah) / 2;
} else {
statusKetemu = true;
lokasi = tengah;
}
}
if (statusKetemu == true) {
System.out.println("Data yang anda cari KETEMU di larik ke :" + lokasi);
// menghapus data yang ketemu
for (int i = lokasi; i <= N - 2; i++) {
biodataMahasiswa[i] = biodataMahasiswa[i + 1];
}
System.out.println("Proses menghapus data ke-" + lokasi + " selesai.");

// memperbarui banyaknya data (N), banyaknya data berkuran satu.....


N--;
} else {
System.out.println("maap, nama yang anda cari tidak ditemukan ");
}
}

//Fungsi untuk mengurutkan data(Selection)


public static void mengurutkanDataSelection(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan Selection");
formatBiodata biodataSementara = new formatBiodata();
String teksTerkecil = "";
int lokasi=0;
//bagian mengurutkan dengan teknik selection
for(int i=0; i<=N-2; i++){
//data pertama yang dibaca dianggap data terkecil
teksTerkecil = "zzzzzzz";

//menentukan bilangan terkecil mulai larik ke i+1 sampai N-1


for(int S=i+1; S<=N-1; S++){
if (biodataMahasiswa[S].nama.compareTo(teksTerkecil)<0){
//jika data[S] adlh bilangan terkecil, simpan di teksTerkecil
teksTerkecil = biodataMahasiswa[S].nama;
//mencatat posisi dimana data terkecil ada
lokasi = S;
}
}
//membandingkan data[lokasi]yang adalah data terkecil, versus data[i] yang adalah
'diagonal ke-i'
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[lokasi].nama)>0){
//tukar posisi
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[lokasi];
biodataMahasiswa[lokasi] = biodataSementara;
}
}
}

//Fungsi untuk menampilkan data


public static void tampilkanData(formatBiodata biodataMahasiswa[]){
System.out.println("----------------------------------------------------");
System.out.println("\tNAMA\t\tALAMAT\t\tUMUR\tJEKEL\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(i +".\t");
System.out.print (biodataMahasiswa[i].nama+"\t\t");
System.out.print (biodataMahasiswa[i].alamat+"\t");
System.out.print (biodataMahasiswa[i].umur+"\t");
System.out.print (biodataMahasiswa[i].jekel+"\t");
System.out.println(biodataMahasiswa[i].ipk+"\t");
}
System.out.println("----------------------------------------------------");
}
//Program utama
public static void main(String[] args){
formatBiodata biodataMahasiswa[] = new formatBiodata[5];
biodataMahasiswa[0] = new formatBiodata();
biodataMahasiswa[1] = new formatBiodata();
biodataMahasiswa[2] = new formatBiodata();
biodataMahasiswa[3] = new formatBiodata();
biodataMahasiswa[4] = new formatBiodata();
ngentriData(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mencari data secara biner


mencariDanHapusDataBiner(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataSelection
mengurutkanDataSelection(biodataMahasiswa);
tampilkanData(biodataMahasiswa);
}
}

Penjelasan :
Algoritma selection sort akan membagi larik menjadi dua bagian. Bagian
kiri akan menjadi data yang sudah urut sedangkan bagian kanan adalah bagian
yang masih acak.
Proses pengurutan dilakukan dengan cara mengambil sebuah elemen
kunci, kemudian membandingkan dengan elemen terkecil dari larik bagian kanan.
Jika elemen kunci lebih besar dari elemen terkecil dari larik bagian kanan
tersebut, tukarkan kedua elemen tersebut.
Proses dilanjutkan dengan mengambil sebuah elemen kunci yang baru,
kemudian membandingkan lagi elemen kunci tersebut dengan elemen terkecil
dari larik bagian kanan yang masih tersisa. Jika elemen kunci lebih besar dari
elemen terkecil dari larik bagian kanan tersebut, lakukan kembali pertukarkan
kedua elemen seperti langkah sebelumnya. Proses seperti ini harus diulang terus
menerus hingga larik bagian kiri penuh dan larik bagian kanan habis.
Dalam program praktik 2 ini bagian fungsi algoritma selection sort berada
dibaris ke 86 s/d 115. Untuk output program praktik 2 ini sebagai berikut:
Output
Penjelasan output :
Dalam output tersebut, ketika kita selesai
memasukkan/input
nama,alamat,umur,jekel dan IPK tampilan
selanjutnya muncul tampilan pencarian
biner kata kunci mana yang akan dicari,
setelah sudah ketemu, maka muncul fungsi
pengurutan secara selection sort yang
dimana pengurutan nama dari A-Z.
Praktik 3
Eksekusi master program untuk melakukan pengurutan data secara
InsertionSort.
Program
import java.util.Scanner;
class formatBiodata{
//bagian deklarasi struktur record
String nama;
String alamat;
int umur;
char jekel;
float ipk;
}
class praktik3{
public static int N=5;
//bagian entri data ke dalam struktur larik
static void ngentriData(formatBiodata biodataMahasiswa[]){
Scanner masukan = new Scanner(System.in);
int bacaTombol=0;

for(int i=0; i<=N-1; i++){


System.out.print("Silahkan masukkan nama anda : ");
biodataMahasiswa[i].nama = masukan.next();

System.out.print("Silahkan masukkan alamat anda : ");


biodataMahasiswa[i].alamat = masukan.next();

System.out.print("Silahkan masukkan umur anda : ");


biodataMahasiswa[i].umur = masukan.nextInt();

System.out.print("Silahkan masukkan Jenis Kelamin anda : ");


try{
bacaTombol = System.in.read();
}
catch(java.io.IOException e)
{
}
biodataMahasiswa[i].jekel = (char)bacaTombol;
System.out.print("Silahkan masukkan IPK anda : ");
biodataMahasiswa[i].ipk = masukan.nextFloat();
System.out.println("");
}
}

//Fungsi untuk Mencari Data Secara Binary Search dan Hapus


public static void mencariDanHapusDataBiner(formatBiodata biodataMahasiswa[]) {
String kataKunci;
int lokasi = -1;
boolean statusKetemu = false;
// bagian memasukkan kata kunci
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan kata kunci pencarian : ");
kataKunci = masukan.next();
// bagian mencari data satu persatu urut dari larik terdepan
int atas, bawah, tengah;
atas = 0;
bawah = N - 1;
tengah = (atas + bawah) / 2;
while ((statusKetemu == false) && (bawah - atas != 1)) {
System.out.println(biodataMahasiswa[tengah].nama + " <---> " + kataKunci);
// jika kataKunci < biodataMahasiswa[tengah].nama)
if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) < 0) {
bawah = tengah;
tengah = (atas + bawah) / 2;
}
// jika kataKunci > biodataMahasiswa[tengah].nama)
else if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) > 0) {
atas = tengah;
tengah = (atas + bawah) / 2;
} else {
statusKetemu = true;
lokasi = tengah;
}
}
if (statusKetemu == true) {
System.out.println("Data yang anda cari KETEMU di larik ke :" + lokasi);
// menghapus data yang ketemu
for (int i = lokasi; i <= N - 2; i++) {
biodataMahasiswa[i] = biodataMahasiswa[i + 1];
}
System.out.println("Proses menghapus data ke-" + lokasi + " selesai.");

// memperbarui banyaknya data (N), banyaknya data berkuran satu.....


N--;
} else {
System.out.println("maap, nama yang anda cari tidak ditemukan ");
}
}

//Fungsi untuk mengurutkan data(Insertion)


public static void mengurutkanDataInsertion(formatBiodata biodataMahasiswa[])
{
System.out.println("Mengurutkan Data dengan Insertion");
formatBiodata biodataSementara = new formatBiodata();
//untuk menentukan awal dari data sisi kanan (sisi yg masih berantakan)
int awal;
//untuk mencari posisi yg tepat pada sisi kiri (sisi yg sudah berurutan)
int cari;
awal = 1;
while (awal <=N-1)
{
biodataSementara = biodataMahasiswa[awal];
cari = awal-1;
//cari akan bergerak dari kanan (awal-1) ke kiri
while ( cari >= 0)
{
//( biodataMahasiswa[cari].nama > biodataSementara.nama )
if (biodataMahasiswa[cari].nama.compareTo(biodataSementara.nama)>0)
{
biodataMahasiswa[cari+1] = biodataMahasiswa[cari];
biodataMahasiswa[cari] = biodataSementara;
cari--; //cari digeser kekiri 1 langkah
}
else
{ biodataMahasiswa[cari+1] = biodataSementara;
// perintah ini untuk keluar dari loop while
cari=-1;
}
}
awal++;
}
}

//Fungsi untuk menampilkan data


public static void tampilkanData(formatBiodata biodataMahasiswa[]){
System.out.println("----------------------------------------------------");
System.out.println("\tNAMA\t\tALAMAT\t\tUMUR\tJEKEL\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(i +".\t");
System.out.print (biodataMahasiswa[i].nama+"\t\t");
System.out.print (biodataMahasiswa[i].alamat+"\t");
System.out.print (biodataMahasiswa[i].umur+"\t");
System.out.print (biodataMahasiswa[i].jekel+"\t");
System.out.println(biodataMahasiswa[i].ipk+"\t");
}
System.out.println("----------------------------------------------------");
}
//Program utama
public static void main(String[] args){
formatBiodata biodataMahasiswa[] = new formatBiodata[5];
biodataMahasiswa[0] = new formatBiodata();
biodataMahasiswa[1] = new formatBiodata();
biodataMahasiswa[2] = new formatBiodata();
biodataMahasiswa[3] = new formatBiodata();
biodataMahasiswa[4] = new formatBiodata();
ngentriData(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mencari data secara biner


mencariDanHapusDataBiner(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataInsertion
mengurutkanDataInsertion(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

}
}

Penjelasan :
Algoritma Insertion sort akan membagi larik menjadi dua bagian. Bagian
kiri akan menjadi data yang sudah urut sedangkan bagian kanan adalah bagian
yang masih acak.
Proses pengurutan dilakukan dengan cara mengambil sebuah elemen
kunci, kemudian meletakkan di tempat yang sesuai pada bagian kiri larik. Proses
pencarian tempat yang sesuai dilakukan dengan membandingkan elemen kunci
tersebut dengan setiap elemen yang ada di bagian kiri larik, dimulai dari kanan.
Apabila ditemukan tempat yang sesuai maka elemen kunci tersebut akan
disisipkan di lokasi yang dimaksud. Proses dilanjutkan dengan mengambil sebuah
elemen kunci yang baru yang ada di sebelah kanan elemen kunci yang
sebelumnya, kemudian dilakukan kembali proses di atas, hingga semua data pada
bagian kanan larik habis.
Dalam program praktik 3 diatas fungsi dari algoritma Insertion sort ada
dibaris ke 86 s/d 118. Untuk output program praktik 3 ini sebagai berikut:

Output
Penjelasan output:
Dengan menggunakan pengurutan secara
insertion tersebut, data akan diurutkan
berdasarkan abjad mulai dari a-z.
Praktik 4
Sekarang pikirkan, kemudian modifikasilah ketiga program sorting di atas supaya
nama-nama dalam larik menjadi urut turun (descending).
Program
import java.util.Scanner;
class formatBiodata{
//bagian deklarasi struktur record
String nama;
String alamat;
int umur;
char jekel;
float ipk;
}
class praktik4{
public static int N=5;
//bagian entri data ke dalam struktur larik
static void ngentriData(formatBiodata biodataMahasiswa[]){
Scanner masukan = new Scanner(System.in);
int bacaTombol=0;

for(int i=0; i<=N-1; i++){


System.out.print("Silahkan masukkan nama anda : ");
biodataMahasiswa[i].nama = masukan.next();

System.out.print("Silahkan masukkan alamat anda : ");


biodataMahasiswa[i].alamat = masukan.next();

System.out.print("Silahkan masukkan umur anda : ");


biodataMahasiswa[i].umur = masukan.nextInt();

System.out.print("Silahkan masukkan Jenis Kelamin anda : ");


try{
bacaTombol = System.in.read();
}
catch(java.io.IOException e)
{
}
biodataMahasiswa[i].jekel = (char)bacaTombol;
System.out.print("Silahkan masukkan IPK anda : ");
biodataMahasiswa[i].ipk = masukan.nextFloat();
System.out.println("");
}
}

//Fungsi untuk Mencari Data Secara Binary Search dan Hapus


public static void mencariDanHapusDataBiner(formatBiodata biodataMahasiswa[]) {
String kataKunci;
int lokasi = -1;
boolean statusKetemu = false;
// bagian memasukkan kata kunci
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan kata kunci pencarian : ");
kataKunci = masukan.next();
// bagian mencari data satu persatu urut dari larik terdepan
int atas, bawah, tengah;
atas = 0;
bawah = N - 1;
tengah = (atas + bawah) / 2;
while ((statusKetemu == false) && (bawah - atas != 1)) {
System.out.println(biodataMahasiswa[tengah].nama + " <---> " + kataKunci);
// jika kataKunci < biodataMahasiswa[tengah].nama)
if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) < 0) {
bawah = tengah;
tengah = (atas + bawah) / 2;
}
// jika kataKunci > biodataMahasiswa[tengah].nama)
else if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) > 0) {
atas = tengah;
tengah = (atas + bawah) / 2;
} else {
statusKetemu = true;
lokasi = tengah;
}
}
if (statusKetemu == true) {
System.out.println("Data yang anda cari KETEMU di larik ke :" + lokasi);
// menghapus data yang ketemu
for (int i = lokasi; i <= N - 2; i++) {
biodataMahasiswa[i] = biodataMahasiswa[i + 1];
}
System.out.println("Proses menghapus data ke-" + lokasi + " selesai.");

// memperbarui banyaknya data (N), banyaknya data berkuran satu.....


N--;
} else {
System.out.println("maap, nama yang anda cari tidak ditemukan ");
}
}

//Fungsi untuk mengurutkan data secara Desceding(BubbleSort)


public static void mengurutkanDataDescBubble(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan BubbleSort Desceding");
formatBiodata biodataSementara = new formatBiodata();
int indeksTerakhir = N-1;
for(int j=0; j<=indeksTerakhir-1; j++){
for(int i=0; i<=indeksTerakhir-1-j; i++){
//perintah dibawah ini identik dengan if(nama[i]>nama[i+1])
if (biodataMahasiswa[i].nama.compareTo
(biodataMahasiswa[i+1].nama) < 0){
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[i+1];
biodataMahasiswa[i+1] = biodataSementara;
}
}
}
}

//Fungsi untuk mengurutkan data secara Desceding(Selection)


public static void mengurutkanDataDescSelection(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan Selection Desceding");
formatBiodata biodataSementara = new formatBiodata();
String teksTerkecil = "";
int lokasi=0;

//bagian mengurutkan dengan teknik selection


for(int i=0; i<=N-2; i++){
//data pertama yang dibaca dianggap data terkecil
teksTerkecil = "zzzzzzz";

//menentukan bilangan terkecil mulai larik ke i+1 sampai N-1


for(int S=i+1; S<=N-1; S++){
if (biodataMahasiswa[S].nama.compareTo(teksTerkecil)>0){
//jika data[S] adlh bilangan terkecil, simpan di teksTerkecil
teksTerkecil = biodataMahasiswa[S].nama;
//mencatat posisi dimana data terkecil ada
lokasi = S;
}
}
//membandingkan data[lokasi]yang adalah data terkecil, versus data[i] yang ada
lah 'diagonal ke-i'
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[lokasi].nama)>0){
//tukar posisi
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[lokasi];
biodataMahasiswa[lokasi] = biodataSementara;
}
}
}
//Fungsi untuk mengurutkan data secara Desceding(Insertion)
public static void mengurutkanDataDescInsertion(formatBiodata biodataMahasiswa[])
{
System.out.println("Mengurutkan Data dengan Insertion Desceding");
formatBiodata biodataSementara = new formatBiodata();
//untuk menentukan awal dari data sisi kanan (sisi yg masih berantakan)
int awal;
//untuk mencari posisi yg tepat pada sisi kiri (sisi yg sudah berurutan)
int cari;
awal = 1;
while (awal <=N-1)
{
biodataSementara = biodataMahasiswa[awal];
cari = awal-1;
//cari akan bergerak dari kanan (awal-1) ke kiri
while ( cari >= 0)
{
//( biodataMahasiswa[cari].nama > biodataSementara.nama )
if (biodataMahasiswa[cari].nama.compareTo(biodataSementara.nama)<0)
{
biodataMahasiswa[cari+1] = biodataMahasiswa[cari];
biodataMahasiswa[cari] = biodataSementara;
cari--; //cari digeser kekiri 1 langkah
}
else
{ biodataMahasiswa[cari+1] = biodataSementara;
// perintah ini untuk keluar dari loop while
cari=-1;
}
}
awal++;
}
}

//Fungsi untuk menampilkan data


public static void tampilkanData(formatBiodata biodataMahasiswa[]){
System.out.println("----------------------------------------------------");
System.out.println("\tNAMA\t\tALAMAT\t\tUMUR\tJEKEL\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(i +".\t");
System.out.print (biodataMahasiswa[i].nama+"\t\t");
System.out.print (biodataMahasiswa[i].alamat+"\t");
System.out.print (biodataMahasiswa[i].umur+"\t");
System.out.print (biodataMahasiswa[i].jekel+"\t");
System.out.println(biodataMahasiswa[i].ipk+"\t");
}
System.out.println("----------------------------------------------------");
}
//Program utama
public static void main(String[] args){
formatBiodata biodataMahasiswa[] = new formatBiodata[5];
biodataMahasiswa[0] = new formatBiodata();
biodataMahasiswa[1] = new formatBiodata();
biodataMahasiswa[2] = new formatBiodata();
biodataMahasiswa[3] = new formatBiodata();
biodataMahasiswa[4] = new formatBiodata();
ngentriData(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mencari data secara biner


mencariDanHapusDataBiner(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataDescBubble
mengurutkanDataDescBubble(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataDescSelection
mengurutkanDataDescSelection(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataDescInsertion
mengurutkanDataDescInsertion(biodataMahasiswa);
tampilkanData(biodataMahasiswa);
}
}

Penjelasan:
Pada praktik 4 ini, kita membahas tentang memodifikasi praktik 1-3 agar nama-
namanya menjadi desceding atau dari abjad dari z-a. Untuk program 4 diatas, saya
menggambungkan algoritma Bubblesort, SelecionSort, dan InsertionSort menjadi
satu dan memodifikasi programnya menjadi desceding. Untuk Bubblesort
program yang diubah yaitu
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[i+1].nama) > 0)
menjadi
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[i+1].nama) < 0)
Untuk algorima SelecionSort
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[lokasi].nama)<0){
menjadi
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[lokasi].nama)>0){
Untuk algoritma InsertionSort
if (biodataMahasiswa[cari].nama.compareTo(biodataSementara.nama)>0)
menjadi
if (biodataMahasiswa[cari].nama.compareTo(biodataSementara.nama)<0)
dan untuk outputnya akan seperti berikut

Kesimpulan praktik 1-4:


Jadi, dapat disimpulkan bahwa dari penambahan 3 metode pengurutan tersebut
akan menghasilkan output yang sama. Yang membedakan hanya antara metode
satu dengan lainnya adalah prosesnya.
D. LATIHAN
Modifikasilah program 5.1 dan program 5.2 agar dapat mengurutkan data di
dalam larik berdasarkan IPK
Program
import java.util.Scanner;
class formatBiodata{
//bagian deklarasi struktur record
String nama;
String alamat;
int umur;
char jekel;
float ipk;
}
class latihan{
public static int N=5;
//bagian entri data ke dalam struktur larik
static void ngentriData(formatBiodata biodataMahasiswa[]){
Scanner masukan = new Scanner(System.in);
int bacaTombol=0;

for(int i=0; i<=N-1; i++){


System.out.print("Silahkan masukkan nama anda : ");
biodataMahasiswa[i].nama = masukan.next();

System.out.print("Silahkan masukkan alamat anda : ");


biodataMahasiswa[i].alamat = masukan.next();

System.out.print("Silahkan masukkan umur anda : ");


biodataMahasiswa[i].umur = masukan.nextInt();

System.out.print("Silahkan masukkan Jenis Kelamin anda : ");


try{
bacaTombol = System.in.read();
}
catch(java.io.IOException e)
{
}
biodataMahasiswa[i].jekel = (char)bacaTombol;
System.out.print("Silahkan masukkan IPK anda : ");
biodataMahasiswa[i].ipk = masukan.nextFloat();
System.out.println("");
}
}

//Fungsi untuk Mencari Data Secara Binary Search dan Hapus


public static void mencariDanHapusDataBiner(formatBiodata biodataMahasiswa[]) {
String kataKunci;
int lokasi = -1;
boolean statusKetemu = false;
// bagian memasukkan kata kunci
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan kata kunci pencarian : ");
kataKunci = masukan.next();
// bagian mencari data satu persatu urut dari larik terdepan
int atas, bawah, tengah;
atas = 0;
bawah = N - 1;
tengah = (atas + bawah) / 2;
while ((statusKetemu == false) && (bawah - atas != 1)) {
System.out.println(biodataMahasiswa[tengah].nama + " <---> " + kataKunci);
// jika kataKunci < biodataMahasiswa[tengah].nama)
if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) < 0) {
bawah = tengah;
tengah = (atas + bawah) / 2;
}
// jika kataKunci > biodataMahasiswa[tengah].nama)
else if (kataKunci.compareTo(biodataMahasiswa[tengah].nama) > 0) {
atas = tengah;
tengah = (atas + bawah) / 2;
} else {
statusKetemu = true;
lokasi = tengah;
}
}
if (statusKetemu == true) {
System.out.println("Data yang anda cari KETEMU di larik ke :" + lokasi);
// menghapus data yang ketemu
for (int i = lokasi; i <= N - 2; i++) {
biodataMahasiswa[i] = biodataMahasiswa[i + 1];
}
System.out.println("Proses menghapus data ke-" + lokasi + " selesai.");

// memperbarui banyaknya data (N), banyaknya data berkuran satu.....


N--;
} else {
System.out.println("maap, nama yang anda cari tidak ditemukan ");
}
}

//Fungsi untuk mengurutkan data(BubbleSort)


public static void mengurutkanDataBubble(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan BubbleSort");
formatBiodata biodataSementara = new formatBiodata();
int indeksTerakhir = N-1;
for(int j=0; j<=indeksTerakhir-1; j++){
for(int i=0; i<=indeksTerakhir-1-j; i++){
//perintah dibawah ini identik dengan if(nama[i]>nama[i+1])
if(biodataMahasiswa[i].ipk >= biodataMahasiswa[i+1].ipk){
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[i+1];
biodataMahasiswa[i+1] = biodataSementara;
}
}
}
}

//Fungsi untuk mengurutkan data(Selection)


public static void mengurutkanDataSelection(formatBiodata biodataMahasiswa[]){
System.out.println("Mengurutkan Data dengan Selection");
formatBiodata biodataSementara = new formatBiodata();
float teksTerkecil;
int lokasi=0;

//bagian mengurutkan dengan teknik selection


for(int i=0; i<=N-2; i++){
//data pertama yang dibaca dianggap data terkecil
teksTerkecil =1111111;

//menentukan bilangan terkecil mulai larik ke i+1 sampai N-1


for(int S=i+1; S<=N-1; S++){
if(biodataMahasiswa[S].ipk <= teksTerkecil){
//jika data[S] adlh bilangan terkecil, simpan di teksTerkecil
teksTerkecil = biodataMahasiswa[S].ipk;
//mencatat posisi dimana data terkecil ada
lokasi = S;
}
}
//membandingkan data[lokasi]yang adalah data terkecil, versus data[i] yang adalah
'diagonal ke-i'
if(biodataMahasiswa[i].ipk >= biodataMahasiswa[lokasi].ipk){
//tukar posisi
biodataSementara = biodataMahasiswa[i];
biodataMahasiswa[i] = biodataMahasiswa[lokasi];
biodataMahasiswa[lokasi] = biodataSementara;
}
}
}

//Fungsi untuk menampilkan data


public static void tampilkanData(formatBiodata biodataMahasiswa[]){
System.out.println("----------------------------------------------------");
System.out.println("\tNAMA\t\tALAMAT\t\tUMUR\tJEKEL\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(i +".\t");
System.out.print (biodataMahasiswa[i].nama+"\t\t");
System.out.print (biodataMahasiswa[i].alamat+"\t");
System.out.print (biodataMahasiswa[i].umur+"\t");
System.out.print (biodataMahasiswa[i].jekel+"\t");
System.out.println(biodataMahasiswa[i].ipk+"\t");
}
System.out.println("----------------------------------------------------");
}
//Program utama
public static void main(String[] args){
formatBiodata biodataMahasiswa[] = new formatBiodata[5];
biodataMahasiswa[0] = new formatBiodata();
biodataMahasiswa[1] = new formatBiodata();
biodataMahasiswa[2] = new formatBiodata();
biodataMahasiswa[3] = new formatBiodata();
biodataMahasiswa[4] = new formatBiodata();
ngentriData(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mencari data secara biner


mencariDanHapusDataBiner(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataBubble
mengurutkanDataBubble(biodataMahasiswa);
tampilkanData(biodataMahasiswa);

//mengurutkanDataSelection
mengurutkanDataSelection(biodataMahasiswa);
tampilkanData(biodataMahasiswa);
}
}

Penjelasan:
Untuk program latihan ini, kita menggabungkan antara algoritma Bubblesort dan
SelecionSort di praktik 1 dan 2 namun, mengurutkan datanya berdasarkan nilai
IPK. Program yang diubah antara lain, untuk algoritma Bubblesort
if (biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[i+1].nama) > 0)
Menjadi
if(biodataMahasiswa[i].ipk >= biodataMahasiswa[i+1].ipk){
untuk algoritma SelecionSort
• String teksTerkecil = "";
• teksTerkecil = "zzzzzzz";
• if (biodataMahasiswa[S].nama.compareTo(teksTerkecil)<0){
• teksTerkecil = biodataMahasiswa[S].nama;
• if
(biodataMahasiswa[i].nama.compareTo(biodataMahasiswa[lokasi].nama)>0){
menjadi
• float teksTerkecil;
• teksTerkecil =1111111;
• if(biodataMahasiswa[S].ipk <= teksTerkecil){
• teksTerkecil = biodataMahasiswa[S].ipk;
• if(biodataMahasiswa[i].ipk >= biodataMahasiswa[lokasi].ipk)

untuk outputnya aka seperti ini


E. TUGAS
Buatlah sebuah program Sorting dengan metode insertion dalam java
menggunakan dengan menu :
• insert,
• View,
• Sort,
• Exit

Program
import java.util.Scanner;
class menu{
String nama;
int noMhs;
String alamat;
float ipk;
}
class tugas{
public static int N=10, pilih;
public static void input(menu formpilihan[]){
Scanner input = new Scanner(System.in);
for(int i=0; i<=N-1; i++){
System.out.println("Silahkan isi data anda");
System.out.print("Masukan Nama : ");
formpilihan[i].nama = input.next();
System.out.print("Masukan No Mahasiswa : ");
formpilihan[i].noMhs = input.nextInt();
System.out.print("Masukan Alamat : ");
formpilihan[i].alamat = input.next();
System.out.print("Masukan IPK : ");
formpilihan[i].ipk = input.nextFloat();
System.out.println();
}
}
//----------------Fungsi untuk mengurutkan data(Insertion)------------//
public static void mengurutkanDataInsertion(menu formpilihan[]){
menu formpilihanSementara = new menu();

//untuk menentukan awal dari data sisi kanan(sisi yang masih berantakan)
int awal;
//untuk mencari posisi yang tepat pada sisi kiri(sisi yang sudah berurutan)
int cari;
awal = 1;
while(awal<=N-1){
formpilihanSementara = formpilihan[awal];
cari=awal-1;
//cari akan bergerak dari kanan(awwal-1) ke kiri
while(cari>=0){
//(formpilihan[cari].nama > formpilihanSementara.nama)
if(formpilihan[cari].nama.compareTo(formpilihanSementara.nama)>0){
formpilihan[cari+1] = formpilihan[cari];
formpilihan[cari] = formpilihanSementara;
cari--; //cari digeser kekiri 1 langkah
}else{
formpilihan[cari+1] = formpilihanSementara;
//perintah ini untuk keluar dari loop while
cari=-1;
}
}
awal++;
}
}
public static void tampil(menu formpilihan[]){
System.out.println("----------------------------------------------------");
System.out.println("NAMA\t\tNo Mhs\t\tAlamat\t\tIPK");
System.out.println("----------------------------------------------------");
for(int i=0; i<=N-1; i++){
System.out.print(formpilihan[i].nama+"\t\t");
System.out.print(formpilihan[i].noMhs+"\t");
System.out.print(formpilihan[i].alamat+"\t");
System.out.println(formpilihan[i].ipk+"\t");
}
}
public static void main(String[]args){
int j =0;
Scanner input = new Scanner(System.in);

menu formpilihan[] = new menu[N+1];


for(int i=0; i<(N+1); i++){
formpilihan[i] = new menu();
}
do{
System.out.println("====================MENU======================");
System.out.println("[1]. Insert");
System.out.println("[2]. View");
System.out.println("[3]. Sort");
System.out.println("[4]. Exit");
System.out.print("Masukkan pilihan anda : ");
pilih = input.nextInt();
System.out.println("");
if(pilih==1){
System.out.print("Masukan banyak data : ");
N = input.nextInt();
System.out.println("");
input(formpilihan);
}else if(pilih==2){
System.out.println("----------------------------------------------------");
tampil(formpilihan);
System.out.println("----------------------------------------------------");
}else if(pilih==3){
System.out.println("----------------------------------------------------");
mengurutkanDataInsertion(formpilihan);
System.out.println("Data berhasil diurutkan ====> Tampilkan data pilih 2");
System.out.println("----------------------------------------------------");
}else if(pilih==4){
System.exit(0);
}else{
System.out.println("Tidak ada pilihan");
}
}while(pilih != 4);
}
}

Output
BAB III
PENUTUP
F. KESIMPULAN
Saya dapat melakukan pengurutan terhadap suatu data yang terdapat di dalam
larik

Anda mungkin juga menyukai