Contoh Sorting Dengan Menggunakan Bubble Sort + Struct

Sebelumnya kita telah membahas secara sederhana penggunakan metode sorting ‘Bubble Sort’. Nah sekarang saya akan memberikan contoh yang lebih kompleks lagi, yaitu mengkombinasikan ‘Bubble Sort’ dengan ‘Struct’.

Seperti apa contoh programnya?

ni saya berikan contoh program yang menggunakan kombinasi ‘Bubble Sort’ dan ‘Struct’

//Sorting Dengan Metode Bubble Sort
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
    struct mhs {
        int nrp;
        char nama[30];
        int uts, uas, praktek, na;
    };

    struct mhs data_mhs[5];
    struct mhs temp;
    int a, b, c, d, x, y;
    char lihat, e;

    cout << "Data Nilai Mahasiswa Matakuliah AP2"<<endl;
    cout << "==================================="<<endl;
    cout << "Masukkan Jumlah Data Mahasiswa yang Akan di Input: ";
    cin >> c;
    clrscr();
    cout << "Inputkan Data Mahasiswa!\n"<<endl;
    for (a=0;a<c;a++)
    {
        cout << "No ["<<a+1<<"]"<<endl;
        cout << "NRP\t\t: ";
        cin >> data_mhs[a].nrp;
        cout << "Nama\t\t: ";
        gets (data_mhs[a].nama);
        cout << "Nilai UTS\t: ";
        cin >> data_mhs[a].uts;
        cout << "Nilai UAS\t: ";
        cin >> data_mhs[a].uas;
        cout << "Nilai Praktek\t: ";
        cin >> data_mhs[a].praktek;
        data_mhs[a].na=((25*data_mhs[a].uts)+(50*data_mhs[a].uas)+(25*data_mhs[a].praktek))/100;
        cout << "Nilai Akhir\t: "<<data_mhs[a].na;
        cout << "\n\n";
    }
    clrscr();
    lihat:
    cout << "Lihat Data:\n";
    cout << "[1] Belum Terurut\n";
    cout << "[2] Berdasarkan Urutan NRP\n";
    cout << "[3] Berdasarkan Urutan Nilai Akhir\n";
    cout << "Masukan Pilihan: ";
    cin >> lihat;
    if (lihat==’1′)
    {
        clrscr();
        for (a=0;a<c;a++)
        {
            cout << "NRP\t\t: "<<data_mhs[a].nrp<<endl;
            cout << "Nama\t\t: "<<data_mhs[a].nama<<endl;
            cout << "Nilai UTS\t: "<<data_mhs[a].uts<<endl;
            cout << "Nilai UAS\t: "<<data_mhs[a].uas<<endl;
            cout << "Nilai Praktek\t: "<<data_mhs[a].praktek<<endl;
            cout << "Nilai Akhir\t: "<<data_mhs[a].na;
            cout << "\n\n";
        }

        lagi:
        cout << "Lihat Lagi [Y/N]: ";
        cin >> e;
        if (e==’Y’||e==’y’)
        {
            clrscr();
            goto lihat;
        }else if (e==’N’||e==’n’)
        {
            clrscr();
            cout << "SELESAI";
        }else{
            clrscr();
            cout << "Kode Salah!!!";
            goto lagi;
        }
    }else if (lihat==’2′)
    {
        clrscr();
        for (a=1;a<c;a++)
        {
            for (b=0; b<c-a; b++)
            if (data_mhs[b].nrp>data_mhs[b+1].nrp)
            {
                temp.nrp=data_mhs[b].nrp;
                data_mhs[b].nrp=data_mhs[b+1].nrp;
                data_mhs[b+1].nrp=temp.nrp;

                strcpy(temp.nama, data_mhs[b].nama);
                strcpy(data_mhs[b].nama, data_mhs[b+1].nama);
                strcpy(data_mhs[b+1].nama, temp.nama);

                temp.uts=data_mhs[b].uts;
                data_mhs[b].uts=data_mhs[b+1].uts;
                data_mhs[b+1].uts=temp.uts;

                temp.uas=data_mhs[b].uas;
                data_mhs[b].uas=data_mhs[b+1].uas;
                data_mhs[b+1].uas=temp.uas;

                temp.praktek=data_mhs[b].praktek;
                data_mhs[b].praktek=data_mhs[b+1].praktek;
                data_mhs[b+1].praktek=temp.praktek;

                temp.na=data_mhs[b].na;
                data_mhs[b].na=data_mhs[b+1].na;
                data_mhs[b+1].na=temp.na;
            }

            for (a=0;a<c;a++)
            {
                cout << "NRP\t\t: "<<data_mhs[a].nrp<<endl;
                cout << "Nama\t\t: "<<data_mhs[a].nama<<endl;
                cout << "Nilai UTS\t: "<<data_mhs[a].uts<<endl;
                cout << "Nilai UAS\t: "<<data_mhs[a].uas<<endl;
                cout << "Nilai Praktek\t: "<<data_mhs[a].praktek<<endl;
                cout << "Nilai Akhir\t: "<<data_mhs[a].na;
                cout << "\n\n";
            }
        }

        goto lagi;
    }else if (lihat==’3′)
    {
        clrscr();
        for (a=1;a<c;a++)
        {
            for (b=0; b<c-a; b++)
            if (data_mhs[b].na<data_mhs[b+1].na)
            {
                temp.nrp=data_mhs[b].nrp;
                data_mhs[b].nrp=data_mhs[b+1].nrp;
                data_mhs[b+1].nrp=temp.nrp;

                strcpy(temp.nama, data_mhs[b].nama);
                strcpy(data_mhs[b].nama, data_mhs[b+1].nama);
                strcpy(data_mhs[b+1].nama, temp.nama);

                temp.uts=data_mhs[b].uts;
                data_mhs[b].uts=data_mhs[b+1].uts;
                data_mhs[b+1].uts=temp.uts;

                temp.uas=data_mhs[b].uas;
                data_mhs[b].uas=data_mhs[b+1].uas;
                data_mhs[b+1].uas=temp.uas;

                temp.praktek=data_mhs[b].praktek;
                data_mhs[b].praktek=data_mhs[b+1].praktek;
                data_mhs[b+1].praktek=temp.praktek;

                temp.na=data_mhs[b].na;
                data_mhs[b].na=data_mhs[b+1].na;
                data_mhs[b+1].na=temp.na;
            }

            for (a=0;a<c;a++)
            {
                cout << "Nilai Akhir\t: "<<data_mhs[a].na<<endl;
                cout << "NRP\t\t: "<<data_mhs[a].nrp<<endl;
                cout << "Nama\t\t: "<<data_mhs[a].nama<<endl;
                cout << "Nilai UTS\t: "<<data_mhs[a].uts<<endl;
                cout << "Nilai UAS\t: "<<data_mhs[a].uas<<endl;
                cout << "Nilai Praktek\t: "<<data_mhs[a].praktek<<endl;
                cout << "\n\n";
            }
        }

        goto lagi;
    }else{
        clrscr();
        cout << "Kode Salah!!!"<<endl;
        goto lihat;
    }
}

Dan hasil outputnya akan seperti ini ;

bs_2a

Di sini saya mengambil contoh jumlah data mahasiswa yang akan diinputkan adalah sebanyak 2 buah.

Maka tampilan berikutnya adalah seperti ini :

Baca pos ini lebih lanjut

Contoh Sorting dengan Menggunakan Metode Bubble Sort

Selain dengan menggunakan metode ‘Penyisipan Langsung (Straight Insertion Sort)’, kita juga dapat menggunakan metode ‘Penukaran (Exchange Selection)’ atau yang lebih kita kenal dengan istilah metode ‘Gelembung (Bubble Sort)’.

Apa itu ‘Bubble Sort’ ?

Metode ‘Bubble Sort’ merupakan metode pertama yang paling banyak dipelajari oleh programmer. Karena lebih sederhana. Akan tetapi ‘Bubble Sort’ sendiri memiliki kelemahan/kekurangan. Seperti :

  1. ‘Bubble Sort’ tidak efisien dan menyita lebih banyak waktu prosessor dibandingkan dengan metode sorting yang lain.
  2. Penggunaan ‘Bubble Sort’ masih dapat terlihat baik jika jumlah data/elemen yang di inputkan tidak lebih dari 30 atau kurang dari 30 elemen.

Metode gelembung / penukaran adalah metode yang mendasarkan penukaran 2 buah elemen untuk mencapai keadaan urut yang diinginkan.

Berikut ini adalah contoh program dengan menggunakan metode ‘Bubble Sort’ :

#include<stdio.h>

void tampilkan_larik(int data[],int n)
{
    int i;
    for(i=0 ; i<n; i++)
    printf(" %d",data[i]);

    printf ("\n");

}

void bubble_sort (int data[],int n)
{
    int tahap, j, tmp;
    for(tahap = 1; tahap < n; tahap++)
    {
        for(j=0; j < n-tahap; j++)

        if(data[j] > data[j+1])
        {
            tmp = data[j];
            data[j] = data[j+1];
            data[j+1] = tmp;
        }

        printf ("Hasil tahap %d:", tahap);
        tampilkan_larik (data,n);
    }
}

int main()
{

    const JUM_DATA=10;
    int i;
    int data[] = {12,15,4,25,45,10,19,9,32,33};

    bubble_sort (data, JUM_DATA);

    printf ("hasil pengurutan:\n");
    tampilkan_larik (data, JUM_DATA);

    return 0;
}

Baca pos ini lebih lanjut