65599317-Array

Embed Size (px)

DESCRIPTION

Materi kuliah struktur data tentang Array, pointer, memory.

Citation preview

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    ARRAY DAN OPERASINYA 1. Definisi Array

    Array adalah sekumpulan variable yang mempunyai tipe data yang sama yang disimpan di memori secara berurutan.

    Setiap variabel dalam sebuah array disebut sebagai sebuah elemen dan dapat diakses dengan memberikan nama array-nya serta dengan index urutannya.

    Cara pendeklarasian array dalam pemrograman adalah sebagai berikut :

    Dalam Pascal : Var Data:array[1..10] of integer; Dalam C : int Data[10];

    Kedua perintah tersebut berguna untuk membuat suatu array bernama Data

    yang mempunyai 10 buah elemen. Perbedaannya adalah pendeklarasian yang menggunakan bahasa Pascal adalah pendeklarasian array yang mempunyai index elemen dari 1 sampai 10, sedangkan pendeklarasian array yang menggunakan bahasa C membuat array yang selalu dimulai dari index ke-0 sampai 9 yaitu banyakdata-1.

    Untuk melihat bagaimana array disimpan dalam memori, asumsikan kita mempunyai kode program sebagai berikut :

    int data[5]; data[0]=5; data[1]=8; data[3]=data[0]+data[1];

    Berdasarkan perintah di atas, maka penyimpanan dalam memorinya dapat

    dilihat seperti gambar di bawah ini.

    Elemen Alamat Isi [2 byte]

    data[0] 1000 5 data[1] 1002 8 data[2] 1004 Tidak terdefinisi data[3] 1006 13 data[4] 1008 Tidak terdefinisi

    Catat bahwa pada data[2] dan data[4] berisi nilai yang terdefinisi, itu bukan

    berarti tidak terdapat data atau 0, tetapi berisi data yang tidak bisa diperkirakan. Untuk menghindari kesalahan, lebih baik ketika pembuatan array ada inisialisasi data.

    Halaman - 1

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Contoh aplikasi array dengan menggunakan bahasa C adalah :

    #include #include #define maks 5 main() { int i; int data[5]; clrscr(); printf("Pemasukan data :\n"); for(i=0;i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    2. Operasi-operasi Array 2.1. Pengaksesan data array

    Pengaksesan data array dapat dilakukan dengan cara memberikan nama variabel array tersebut serta indexnya. Contoh : Data[0]=5; Data[1]=7; Printf(Data pertama adalah %d \n,Data[0]); Cara lain untuk pengaksesan data array dalam bahasa C adalah dengan menggunakan pointer. Contoh :

    1 2 3 4 5 6 7 8 9 10 11

    int data[5]={1,4,5,6,7}; int *p,i; //p adalah pointer ke data int, i adalah sebuah int p=data; i=data[2]; *p=50; // identik dengan data[0]=50 *(p+1)=15; // identik dengan data[1]=15 *(p+2)=*p+data[1]; // identik dengan data[2]=data[2]+data[1]; p++; // alamat p ditambah 1 (p berisi alamat int berikutnya) printf(Isi P adalah : ,*p);// akan muncul data[1] yaitu 50 p=p+2; // alamat p ditambah 2(p berisi alamat 2 int berikutnya printf(Isi P sekarang : ,*p);// akan muncul data[3] yaitu 6

    Perintah di atas dapat dijelaskan seperti gambar di bawah ini. Variabel

    Array Data

    data[0] data[1] data[2] data[3] Data[4] p i

    Alamat 1000 1002 1004 1006 1008 100A 100C 1 1 4 5 6 7 bd bd 2 1 4 5 6 7 tdk tdk 3 1 4 5 6 7 1000 tkd 4 1 4 5 6 7 1000 5 5 50 4 5 6 7 1000 5 6 50 15 5 6 7 1000 5 7 50 15 65 6 7 1000 5 8 50 15 65 6 7 1002 5 9 Isi P adalah : 50 10 50 15 65 6 7 1006 5

    BAR

    IS

    11 Isi P Sekarang : 6 Keterangan : bd = belum dideklarasikan, tdk = memiliki nilai tetapi tidak diketahui

    Pengaksesan data dengan menggunakan pointer akan banyak dipakai dalam pertemuan-pertamuan mendatang. Ini dikarenakan kemampuan pointer untuk mengambil/menyimpan data berupa alamat di memori. Oleh karena itu, program 1 dapat diedit dengan mengganti proses pembacaan dan menampilkan dengan data menggunakan pointer.

    Halaman - 3

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    #include #include #define maks 5 main() { int i,*p; int data[5]; p=data; clrscr(); printf("Pemasukan data :\n"); for(i=0;i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    data[0]=1; data[1]=5; data[2]=8; data[3]=9; data[4]=8; Karena proses menampilkan data array ini akan sangat banyak dipakai, maka sebaiknya proses ini dibuat dalam bentuk sebuah fungsi yang memiliki parameter/argumen berupa array dan banyaknya data. Fungsi tersebut adalah : void view_array(int data[],int banyakdata) { int i; for(i=0;i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    2.3. Penambahan data ke array Penambahan data ke array adalah proses menambahkan sebuah elemen ke dalam sebuah array. Biasanya posisi data barunya berada di akhir array. Contoh : Kondisi Awal : data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 - - 3 Misalkan ada satu data baru yaitu 7, maka data baru tersebut disimpan di yang paling akhir, kemudian variabel banyakdata harus ditambah 1.

    baru 7

    data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 7 - 4 Begitu juga bila ada data baru lagi dengan nilai 80, maka akan ada proses penyimpanan data di akhir array dan menambah variabel banyakdata akan bertambah 1 menjadi 5. Sehingga kondisi data di memori dapat digambar seperti gambar di bawah ini.

    Baru 80

    data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 7 80 5 Dari gambar di atas, dapat dilihat bahwa array sudah penuh. Jika ada penambahan lagi, maka data akan disimpan di tempat yang salah. Oleh karena itu sebaiknya ada pemeriksaan kondisi apakah banyak data sudah mencapai batas maksimal. Jika belum mencapai data maksimal, maka proses penambahan dapat dilakukan, dan jika telah mencapai data maksimal, maka proses penambahan data tidak dapat dilakukan. Agar lebih bermanfaat, maka lebih baik proses tersebut dibuat menjadi sebuah fungsi yang mempunyai parameter/argumen berupa array, variabel banyakdata yang akan berganti nilai ketika proses penambahan telah terjadi dan variabel baru yang berisi data yang akan disisipkan.

    Halaman - 6

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    void tambah_array(int data[], int *banyakdata, int baru) { if (*banyakdata < maks) { data[*banyakdata]=baru; *banyakdata+=1; } else { printf("Array Penuh. Penambahan gagal\n"); } } Contoh pemanggilan fungsinya adalah : int a[5]; int bd=0; tambah_array(a,&bd,3); tambah_array(a,&bd,5); view_array(a,bd);// Menampilkan data array A sebanyak bd

    2.4. Penyisipan data ke array Penyisipan data ke array adalah proses menyisipkan data di array di lokasi tertentu. Masalah yang timbul ketika ada suatu proses penyisipan nilai, yaitu adanya pergeseran nilai pada data berikutnya. Untuk lebih jelas, perhatikan ilustrasi di bawah ini. Kondisi Awal : data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 - - 3 Jika ada penyisipan data baru dengan nilai yang akan dimasukan adalah 4 dan ingin disimpan di posisi array ke-2 (urutan 1 jika dalam array bahasa C), maka data pada posisi 2 dan berikutnya harus bergeser sehingga data-data tersebut tidak hilang. Jika proses ini telah selesai maka variabel banyakdata akan bertambah 1 sehingga menjadi 4. data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 - - 3

    Baru 4

    Sehingga setelah proses penyisipan, array akan berisi : data[0] data[1] data[2] data[3] data[4] banyakdata

    3 4 5 6 - 4

    Pergeseran Nilai dilakukan dari posisi terakhir ke posisi penyisipan

    Halaman - 7

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Proses penyisipan data hanya dapat dilakukan jika posisi tempat penyisipan berada di antara 1 sampai banyakdata (dalam bahasa C harus di antara 0 sampai banyakdata-1 karena array dalam bahasa C selalu dimulai dari data ke-0). Algoritma penyisipan data array adalah : a. Jika array belum penuh, lanjutkan ke proses b, dan jika telah penuh, proses

    berakhir dan proses dibatalkan. b. Jika posisi penyisipan berada dalam range array, maka kerjakan proses c

    sedangkan jika posisi penyisipan di luar range array, maka proses penyisipan dibatalkan.

    c. Lakukan pergeseran dari posisi banyakdata menurun sampai posisi penyisipan, dengan ketentuan data[i+1]=data[i], dimana i mempunyai nilai dari posisi banyakdata sampai posisi penyisipan data (menurun).

    d. Isikan nilai baru ke data[posisi sisip]. (data[posisi]=baru). e. Variabel banyakdata ditambah 1. Untuk lebih jelas, algoritma tersebut diimplementasikan dengan menggunakan bahasa C. Proses penyisipan membutuhkan 3 parameter yaitu array yang akan memuat data, banyakdata sekarang yang akan berubah setelah proses, data baru, dan posisi penyisipannya. void sisip_array(int data[], int *banyakdata, int baru, int posisi) { int i; if (*banyakdata < maks) { if((posisi>0)&&(posisi= posisi;i--) { data[i+1]=data[i]; } data[posisi]=baru; *banyakdata+=1; } else printf("Posisi di luar jangkauan. Penyisipan gagal\n"); } else { printf("Array Penuh. Penyisipan gagal\n"); } }

    Halaman - 8

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Contoh pemanggilan fungsi tersebut adalah : int a[5]; int bd=0,baru; tambah_array(a,&bd,3); tambah_array(a,&bd,5); sisip_array(a,&bd,8,2);// sisip nilai 8 di posisi 2 baru=56; sisip_array(a,&bd,baru,1);//sisip nilai variable baru di posisi 1 sisip_array(a,&bd,88,15);// gagal karena di luar range array view_array(a,bd);// Menampilkan data array A sebanyak bd Setelah program itu dijalankan, maka array akan berisi 56,3,8,5

    2.5. Penghapusan data dari array Penghapusan data dari array berarti menghilangkan suatu elemen data dalam array pada posisi tertentu. Proses penghapusan ini mengakibatkan adanya pergeseran data. Untuk lebih jelas lihat ilustrasi di bawah ini. Kondisi Awal : data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 8 - 4 Jika ada penghapusan dilakukan pada posisi 2, maka data posisi 3 akan dipindahkan ke posisi 2, data di posisi 4 akan dipindahkan ke posisi 3, dan proses pemindahan data ke posisi sebelumnya dilakukan sampai data terakhir. Setelah proses ini dilakukan, maka variabel banyakdata akan dikurangi 1 karena ada data yang dihapus. data[0] data[1] data[2] data[3] data[4] banyakdata

    3 5 6 8 - 4 Proses penggeseran nilai dilakukan terhadap data dari posisi hapus +1 sampai posisi banyakdata. Sehingga setelah proses penghapusan, array akan berisi : data[0] data[1] data[2] data[3] data[4] banyakdata

    3 6 8 - - 3 Proses penghapusan data hanya akan bisa terjadi kalau posisi hapus ada dalam range array (posisi 1 s/d posisi banyakdata). Jika posisi hapus berada di luar range array yang sudah terisi data, maka proses penghapusan dibatalkan. Jika array kosong (banyakdata=0) maka proses penghapusan juga tidak bisa dilakukan (dibatalkan).

    Halaman - 9

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Algoritma penghapusan data array adalah : a. Jika array tidak kosong (banyakdata>0), maka lanjutkan ke proses b. Jika

    array kosong proses penghapusan dibatalkan. b. Jika posisi penghapusan berada dalam range array, maka kerjakan proses c

    sedangkan jika posisi penghapusan berada di luar range array, maka proses penghapusan dibatalkan.

    c. Lakukan perulangan untuk i dari posisi hapus sampai data terakhir-1, kemudian lakukan pemindahan data agar data pada posisi ke-i diisi dengan berikutnya (posisi i+1). Sederhananya proses pemindahan dapat dilakukan dengan ketentuan data[i]=data[i+1];

    d. Setelah proses pergeseran data, variabel banyakdata dikurangi 1, karena telah ada 1 data yang dihapus.

    Implementasi dari algoritma di atas dapat dilihat pada script program berbahasa C di bawah ini. void hapus_array(int data[], int *banyakdata, int posisi) { int i; if (*banyakdata > 0) { if((posisi>0)&&(posisi

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    2.6. Pencarian data Pencarian data berarti proses mencari suatu data terdapat dalam array atau tidak. Proses ini biasanya menghasilkan nilai benar atau salah. Adapun algoritma-algoritma yang biasa digunakan untuk melakukan proses pencarian dalam array adalah : - Algoritma Sekuensial (Sequential Search)

    Pencarian sekuensial adalah suatu metode pencarian dengan cara menelusuri seluruh elemen, biasanya dari data pertama sampai data yang dicari ditemukan atau sampai data terakhir. Pencarian sekuensial dapat dilakukan pada array yang terurut atau tidak terurut. Ada dua jenis pencarian secara sekuensial, yaitu a. Pencarian sekuensial dengan sentinel

    Pencarian ini dilakukan dengan cara menelusuri data yang ada di array dan membandingkannya dengan data yang dicari sampai data yang dicari ditemukan. Oleh karena itu, maka untuk mengatasi apabila data yang dicari tidak ada di array, maka digunakan sentinel yaitu suatu Pencarian yang menggunakan sentinel selalu dapat menemukan data. Tetapi sebelum pencarian data, ada proses pengisian sentinel (data terakhir diisi dengan data yang dicari), Contoh 1: Data yang dicari adalah : 7 Banyak data : 5 Array :

    Untuk Sentinel

    5 8 7 6 9 Ketika pencarian, nilai yang dicari diisikan ke urutan terakhir. Sehingga array berisi :

    5 8 7 6 9 7 Sehingga ketika pencarian dengan teknik ini, maka pencarian akan selalu menemukan data yang dicari. Untuk menentukan kondisi apakah data tersebut ditemukan atau tidak adalah dengan memeriksa di index ke berapa data tersebut ditemukan. Jika index data bernilai masih di bawah atau sama dengan banyak data yang ada di array, maka itu berarti data ditemukan dan jika index data melebihi dari banyak data yang ada di array berarti data tidak ditemukan. Untuk kasus di atas, maka pencarian akan berakhir pada index ke-3, karena data ada. Tetapi kalau data yang dicari adalah 10, maka array akan berisi :

    5 8 7 6 9 10 Sehingga pencarian akan berakhir pada index ke-6. Karena 6 lebih besar dari 5 (banyak data), itu berarti data tidak ditemukan. Kekurangan dari algoritma ini adalah kita harus menyediakan 1 tempat untuk sentinel.

    Halaman - 11

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Contoh script berbahasa C untuk pencarian menggunakan sentinel adalah sebagai berikut : int cari_sekuensial_sentinel(int data[],int banyakdata, int dicari) { int i=0; data[banyakdata]=dicari;//pengisian sentinel while(data[i]!=dicari)//selama belum ditemukan { i++; } if(i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    d. Setelah perulangan b s/d c selesai, maka jika variabel ditemukan mempunyai nilai true, berarti data yang dicari ada di posisi ke-i. Jika variabel ditemukan mempunyai nilai false, berarti data yang dicari tidak ditemukan.

    Implementasi dari algoritma di atas adalah : int cari_sekuensial(int data[],int banyakdata, int dicari) { int i=0; int ditemukan=0;// dalam bahasa c, false adalah nilai 0 while((i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    posisi tengah diisi dengan posisi tengah antara posisi kiri baru dan kanan), dan jika data yang dicari sama dengan data di posisi tengah, maka berarti data telah ditemukan. Perulangan dilakukan selama posisi kiri < posisi kanan (belum berseberangan) dan data belum ditemukan. Untuk lebih jelas, perhatikan urutan pencarian data secara binary. Contoh 1 (kasus data yang dicari ada dalam array): Data yang dicari adalah : 50 Banyak data : 10 Array :

    1 4 8 9 10 15 16 25 50 55 Urutan pencariannya adalah : Kiri = 1 Kanan = 10 Tengah = (1+10)/2 = 5,5 = 5 [ambil bilangan bulatnya]

    1 4 8 9 10 15 16 25 50 55

    Kiri Tengah Kanan Kemudian bandingkan data yang dicari (50) dengan data posisi tengah (10). Ada 3 kemungkinan yang terjadi, yaitu : - Jika data posisi tengah > data yang dicari, maka pencarian dilakukan di

    array bagian kiri, dengan cara memindahkan kanan ke posisi tengah+1 (kanan=tengah-1) dan posisi tengah dicari kembali dengan rumus (kiri+kanan)/2.

    - Jika data posisi tengah < data yang dicari, maka pencarian dilakukan di array bagian kanan, dengan cara memindahkan posisi kiri dengan posisi tengah+1, dan posisi tengah dicari kembali dengan rumus (kiri+kanan)/2.

    - Jika data posisi tengah = data yang dicari, berarti data telah ditemukan pada posisi tengah.

    Dengan kasus di atas (data[tengah]=10 dan dicari=50), maka pencarian yang akan dilakukan adalah pada array bagian kanan. Oleh karena itu posisi kiri berpindah dari 0 menjadi 6 (tengah+1). Kiri = 6 Kanan = 10 Tengah = (6+10)/2 = 8 [ambil bilangan bulatnya]

    1 4 8 9 10 15 16 25 50 55

    Tengah KananKiri

    Halaman - 14

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Lakukan kembali proses pembandingan seperti tadi sehingga didapatkan bahwa nilai yang dicari lebih besar daripada nilai di posisi tengah, maka pencarian dilakukan lagi pada bagian kanan dengan kondisi : Kiri=tengah+1=9 Kanan=10 Tengah=(kiri+kanan)/2=(10+9)/2=9.

    1 4 8 9 10 15 16 25 50 55

    Kiri/Tengah Kanan Kemudian lakukan lagi perbandingan, sehingga didapatkan bahwa data yang dicari (50) sudah sama dengan data posisi tengah, maka itu berarti data telah ditemukan pada posisi ke 9. Contoh 2 (kasus data yang dicari tidak ada dalam array) : Data yang dicari adalah : 5 Banyak data : 5 Array :

    1 4 8 9 10 15 16 25 50 55 Urutan pencariannya adalah : Kiri = 1 Kanan = 10 Tengah = (1+10)/2 = 5,5 = 5 [ambil bilangan bulatnya]

    1 4 8 9 10 15 16 25 50 55

    Kiri Tengah Kanan Kemudian bandingkan data yang dicari (5) dengan data posisi tengah (10), sehingga didapatkan bahwa data yang dicari lebih kecil dari data posisi tengah, sehingga pencarian dilakukan pada array bagian kiri. Kondisi pencariannya : Kiri=1; Kanan=Tengah-1 = 5-1 = 4 Tengah=(1+Kanan)/2 = (1+4)/2= 5/2 =2

    1 4 8 9 10 15 16 25 50 55 Kemudian bandingkan lagi data yang dicari (5) dengan data yang di posisi tengah (4). Didapatkan kondisi bahwa data yang dicari (5) lebih besar dari posisi tengah (4), maka pencarian kembali dilakukan di posisi kanan, sehingga kondisi pencarian adalah :

    Kiri KananTengah

    Halaman - 15

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Kiri = Tengah+1 = 2+1 =3 Kanan = 4 Tengah = (Kiri+Kanan)/2 = (3+4)/2 = 7/2 =3

    1 4 8 9 10 15 16 25 50 55 Kemudian bandingkan lagi data yang dicari (5) dengan data tengah (8), didapatkan kondisi bahwa data yang dicari lebih kecil dari data tengah sehingga pencarian harus dilakukan di posisi kiri sehingga kondisi pencarian adalah :

    Kiri/Tengah Kanan

    Kanan = (Tengah-1) = 3-1 =2 Kiri = 3 Tengah = (Kiri+Kanan) =(2+3)/2 = 5/2 =2

    1 4 8 9 10 15 16 25 50 55

    Kanan/Tengah Kiri

    Berseberangan

    Karena posisi kiri telah melebihi posisi kanan, maka pencarian selesai dan itu menunjukan bahwa data tidak ditemukan. Implementasi dari algoritma di atas adalah :

    int cari_binary(int data[],int banyakdata, int dicari) { int kiri,kanan,tengah,ditemukan=0; kiri=0; kanan=banyakdata-1; while((kiridicari) kanan=tengah-1; else if(data[tengah]

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Cara penggunaan fungsi tersebut adalah : int a[5]={10,22,34,42,55}; int bd=5; int posisi; clrscr(); view_array(a,bd);printf("\n"); posisi=cari_binary(a,bd,34); if(posisi!=0) printf("Data ditemukan di posisis : %d\n",posisi); else printf("Data tidak ditemukan\n");

    2.7. Pengurutan Data Pengurutan data berarti proses menyusun data yang ada dalam array sehingga dapat terurut baik ascending (menaik) atau descending (menurun). Adapun algoritma-algoritma yang biasa digunakan untuk melakukan proses pengurutan data dalam array adalah : - Algoritma Bubble Sort

    Algoritma pengurutan dengan menggunakan teknik bubble sort adalah dengan membandingkan sebuah elemen array ke-i dengan elemen array berikutnya (elemen ke-i+1). Jika isi elemen array ke-i lebih besar dari elemen array ke-i+1, maka tukarkan isinya. Algoritma ini adalah algoritma pengurutan yang paling sederhana, tetapi paling lambat untuk array yang memiliki elemen yang banyak. Contoh Kasus dengan banyak data adalah 10 : Array: 5 3 7 9 2 3 6 4 3 1

    Catatan : untuk kasus di atas sengaja angka terkecil dipakai di akhir data sehingga ini akan menghasilkan kondisi terburuk dari pengurutan. Awal: 5 3 7 9 2 3 6 4 3 1 L. 1 3 5 7 2 3 6 4 3 1 9 L. 2 3 5 2 3 6 4 3 1 7 9 L. 3 3 2 3 5 4 3 1 6 7 9 L. 4 2 3 3 4 3 1 5 6 7 9 L. 5 2 3 3 3 1 4 5 6 7 9 L. 6 2 3 3 1 3 4 5 6 7 9 L. 7 2 3 1 3 3 4 5 6 7 9 L. 8 2 1 3 3 3 4 5 6 7 9 L. 9 1 2 3 3 3 4 5 6 7 9

    Catatan : data yang diarsir adalah data yang telah terurut. Dari gambaran di atas, ketika banyak data adalah 10, maka proses pertukaran dilakukan sebanyak 9 langkah. Jadi dapat diketahui bahwa langkah yang dilakukan agar data terurut maksimal sebanyak N-1 langkah dimana N adalah banyaknya data.

    Halaman - 17

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Algoritma pengurutan data dengan algoritma bubble sort adalah : a. Lakukan perulangan untuk i dimulai dari 1 sampai N-1, lakukan proses b. b. Lakukan perulangan j dimulai dari 1 sampai N-1, lakukan perbandingan

    antara data ke-j dengan data ke-(j+1). Jika data ke-j lebih besar dari data ke-(j+1), maka tukarkan datanya.

    Implementasi dari algoritma di atas adalah :

    void sort_bubble(int data[], int banyakdata) { int i,j,temp; for(i=0;i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Cari index bilangan terkecil dari data ke-2 sampai data terakhir untuk disimpan di posisi-2. Dari data sebelumnya didapatkan bahwa data terkecil berada di index ke-5. Tukarkan isi data ke-2 dengan data index ke-5. 1 3 7 9 2 3 6 4 3 5

    Menjadi 1 2 7 9 3 3 6 4 3 5

    Langkah ke-3 : Cari index bilangan terkecil dari data ke-3 sampai data terakhir untuk disimpan di posisi-3. Dari data sebelumnya didapatkan bahwa data terkecil berada di index ke-5. Tukarkan isi data ke-3 dengan data index ke-5. 1 2 7 9 3 3 6 4 3 5

    Menjadi 1 2 3 9 7 3 6 4 3 5

    Langkah ke-4 : Posisi terkecil = 6 1 2 3 9 7 3 6 4 3 5

    Menjadi 1 2 3 3 7 9 6 4 3 5

    Langkah ke-5 : Posisi terkecil = 9 1 2 3 3 7 9 6 4 3 5

    Menjadi 1 2 3 3 3 9 6 4 7 5

    Langkah ke-6 : Posisi terkecil = 8 1 2 3 3 3 9 6 4 7 5

    Menjadi 1 2 3 3 3 4 6 9 7 5

    Langkah ke-7 : Posisi terkecil = 10 1 2 3 3 3 4 6 9 7 5

    Menjadi 1 2 3 3 3 4 5 9 7 6

    Langkah ke-8 : Posisi Terkecil = 10 1 2 3 3 3 4 5 9 7 6

    Menjadi 1 2 3 3 3 4 5 6 7 9

    Langkah ke-9 : Posisi Terkecil = 9, Tidak ada pertukaran data 1 2 3 3 3 4 5 6 7 9

    Menjadi 1 2 3 3 3 4 5 6 7 9

    Halaman - 19

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Algoritma di atas adalah : a. lakukan perulangan i untuk mewakili langkah dari 1 sampai N-1,dimana

    N adalah banyak data. Lakukan proses b. b. Lakukan pencarian index terkecil dalam range data ke-i sampai data ke-N,

    dan simpan index posisinya dalam variabel idxterkecil. Lanjutkan ke proses c.

    c. Jika data ke-i lebih besar dari data ke-indexterkecil, maka tukarkan data ke-i dengan data ke-indexterkecil.

    Implementasi dari program di atas adalah :

    void sort_selection(int data[], int banyakdata) { int i,j,temp,idxterkecil; for(i=0;i

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    - Algoritma Quick Sort

    Algoritma ini merupakan suatu algoritma pengurutan yang cepat. Langkah langkah pengurutan dengan algoritma ini adalah dengan membagi data menjadi dua bagian (kiri dan kanan), dan kemudian setiap bagian dilakukan lagi pengurutan dengan metode yang sama sehingga quick sort dilakukan secara rekursif. Contoh proses pengurutan dengan menggunakan algoritma quick sort adalah sebagai berikut : Contoh data.

    44 33 11 55 77 90 40 60 99 22 88 66 Kiri Pivot

    Kanan

    a. Langkah pertama adalah buat patokan (pivot) di posisi kiri, kemudian

    bandingkan dengan posisi kanan, ulangi selama data di posisi kanan lebih besar dari data di posisi pivot. Selama data di posisi kanan > dari pada posisi pivot dan posisi kanan tidak sama dengan pivot, maka posisi kanan dikurang 1 (agar posisi kanan bergeser ke sebelah kiri). Dari langkah di atas diketahui bahwa posisi kanan akan berhenti di nilai 22 (posisi 10). Lakukan pertukaran antara posisi pivot dengan posisi kanan (10). Sehingga didapatkan data sebagai berikut :

    22 33 11 55 77 90 40 60 99 44 88 66 Kiri Kanan

    Pivot

    b. Langkah berikutnya adalah dengan membuat patokan dari posisi kanan,

    kemudian bandingkan dengan posisi kiri, ulangi selama data di posisi kiri masih lebih kecil daripada data di posisi pivot. Selama data di posisi kiri < daripada data di posisi pivot dan posisi kiri tidak sama dengan posisi pivot, maka posisi kiri ditambah 1 (agar posisi kiri bergeser ke kanan). Sehingga didapatkan bahwa posisi kiri akan berhenti di nilai 55 (posisi 5). Lakukan pertukaran antara data di posisi kiri dengan data di posisi pivot sehingga didapatkan data sebagai berikut :

    22 33 11 44 77 90 40 60 99 55 88 66 Kiri

    Pivot Kanan

    c. Langkah selanjutnya mirip dengan langkah a, yaitu dengan membuat

    pivot di posisi kiri, lakukan perbandingan dengan posisi kanan selama data yang dikanan > daripada data di posisi pivot. Posisi kanan akan terus bergeser ke kiri dan akan berhenti ketika nilai mencapai 40 yaitu pada posisi 7. Sehingga data diposisi kanan(7) ditukar dengan data di posisi pivot (4) sehingga array menjadi.

    22 33 11 40 77 90 44 60 99 55 88 66 Kiri Kanan

    Pivot

    Halaman - 21

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    d. Langkah berikutnya mirip dengan langkah b, yaitu membuat pivot di

    posisi kanan, lakukan perbandingan dengan data kiri selama data di posisi kiri lebih kecil daripada data di posisi pivot. Posisi kiri akan berhenti di nilai 77 (posisi 5). Langkah selanjutnya adalah dengan menukarkan data di posisi kiri dengan data di posisi pivot sehingga didapatkan data seperti di bawah ini.

    22 33 11 40 44 90 77 60 99 55 88 66 Kiri

    Pivot Kanan

    e. Langkah selanjutnya kembali mirip dengan langkah a dimana kita

    membuat patokan di posisi kiri, kemudian bandingkan dengan posisi kanan selama data posisi kanan lebih besar dari pada posisi pivot, maka posisi kanan digeser ke kiri (dikurangi 1). Dalam contoh ini posisi kanan akan berhenti di data 44 (posisi 44). Jika terjadi posisi kanan atau kiri mempunyai nilai sama maka itu berarti data pivot merupakan data tengah dari array dan data telah terbagi menjadi 2 bagian. Perhatikan bahwa data di bagian kiri selalu lebih kecil atau sama dengan data di posisi pivot dan data di bagian kanan selalu lebih besar atau sama dengan data di posisi pivot. Oleh karena itu proses pembagian array menjadi 2 bagian (partisi) telah selesai. Dengan urutan data terakhir di array adalah :

    22 33 11 40 44 90 77 60 99 55 88 66 Kiri

    Kanan Pivot

    Catatan : perulangan langkah a dan langkah b dilakukan hanya ketika posisi kiri lebih kecil dari posisi kanan

    f. Langkah berikutnya adalah dengan melakukan proses di atas terhadap data di ruas kiri (posisi 1 sampai dengan posisi pivot-1), dan ruas kanan (posisi pivot+1 sampai dengan posisi terakhir). Oleh karena itu setiap proses quick sort ini membutuhkan 2 variabel yaitu awal dan akhir yang menandakan dari posisi berapa dan sampai posisi berapa data harus diurutkan.

    Implementasi dari algoritma di atas dalam bahasa C adalah :

    void tukar(int *a, int *b) { int temp; temp=*a; *a=*b; *b=temp; }

    Halaman - 22

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    void urut_quick(int data[], int awal, int akhir) { int kiri,kanan,pivot; kiri=awal; kanan=akhir; while(kiri

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    - Pendeklarasian Matrik Pendeklarasian sebuah matrik dalam bahasa C adalah :

    Tipedata namamatrik[banyakbaris][banyakkolom]; Contoh : int mat1[3][3]; // matrik bertipe integer dengan kolom 3 dan baris 3. float mat2[5][2];//matrik bertipe float dengan kolom 5, baris 2 int mat[3][3]={{1,3,5}, {4,2,2}, {3,5,7}};

    - Pengisian Matrik Pembacaan matrik membutuhkan 2 buah perulangan yaitu perulangan untuk baris dan untuk kolom. Untuk mengisi nilai sebuah elemen matrik, caranya adalah :

    Nama_matrik[baris][kolom] = nilai; Contoh : mat[1][1]=7;// data baris ke-1 kolom ke-1 diisi 7 mat[2][1]=5; // data baris ke-2 kolom ke-1 diisi 5 Contoh pembacaan seluruh elemen matrik dalam bahasa C adalah : int data[3][3]; int b,k; for(b=0;b

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    - Menampilkan Matrik Menampilkan suatu matrik juga memerlukan 2 buah perulangan yaitu baris dan kolom. Contoh program/fungsi untuk menampilkan suatu matrik adalah : int b,k,data[3][3]; baca_matrik(data,3,3); for(b=0;b

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    - Operasi-Operasi Matrik Selain pengisian dan menampilkan matrik, operasi-operasi lain yang dapat dilakukan terhadap matrik adalah penambahan atau pengurangan matrik, perkalian matrik, transpose matrik, identifikasi matrik dan lain-lain. a. Penambahan Matrik

    Maksudnya adalah menjumlahkan elemen 2 buah matrik yang bersesuaian posisinya. Operasi ini menghasilkan matrik baru yang menampung hasil perhitungan. Secara umum aturan penjumlahan matrik mempunyai persamaan Cb,k = Ab,k + Bb,k , dimana b=baris dan k=kolom. Proses di atas harus diulang sesuai dengan banyaknya baris dan kolom. Sehingga kalau diimplementasikan dalam bahasa C, script programnya adalah : int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int mat2[3][3]={{1,1,1},{2,2,2},{3,3,3}}; int mat3[3][3]; int b,k; for(b=0;b

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    b. Pengurangan matrik

    Maksudnya adalah pengurangan elemen 2 buah matrik yang bersesuaian posisinya. Operasi ini menghasilkan matrik baru yang menampung hasil perhitungan. Secara umum aturan pengurangan matrik mempunyai persamaan Cb,k = Ab,k - Bb,k , dimana b=baris dan k=kolom. Proses di atas harus diulang sesuai dengan banyaknya baris dan kolom. Sehingga kalau diimplementasikan dalam bahasa C, script programnya adalah : int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int mat2[3][3]={{1,1,1},{2,2,2},{3,3,3}}; int mat3[3][3]; int b,k; for(b=0;b

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    c. Perkalian Matrik Perkalian matrik hanya bisa dilakukan jika banyak kolom pada matrik pertama sama dengan banyak baris pada matrik kedua. Sebagai contoh : Matrik A mempunyai baris=2, dan kolom=2 Matrik B mempunyai baris=2, dan kolom=4 Maka akan dihasilkan matrik baru (C) dengan baris=2, dan kolom=4.

    Matrik A Matrik B

    A1,1 A1,2A2,1 A2,2

    B1,1 B1,2 B1,3 B1,4B2,1 B2,2 B2,3 B2,4

    Matrik C

    C1,1 C1,2 C1,3 C1,4C2,1 C2,2 C2,3 C2,4

    C1,1 = A1,1 * B1,1 + A1,2 * B2,1 C1,2 = A1,1 * B1,2 + A1,2 * B2,2 C1,3 = A1,1 * B1,3 + A1,2 * B2,3 C1,4 = A1,1 * B1,4 + A1,2 * B2,4 C2,1 = A2,1 * B1,1 + A2,2 * B2,1 C2,2 = A2,1 * B1,2 + A2,2 * B2,2 C2,3 = A2,1 * B1,3 + A2,2 * B2,3 C2,4 = A2,1 * B1,4 + A2,2 * B2,4 Sehingga secara umum persamaan untuk mencari elemen hasil di posisi b,k adalah :

    =

    =n

    ikiibkb BAC

    1,,, *

    Dimana n adalah banyak kolom matrik 1 atau banyak baris matrik 2.

    Halaman - 28

  • ]Mata Kuliah : Struktur Data dengan menggunakan pendekatan bahasa C Oleh : Andri Heryandi, ST

    Implementasi dalam bahasa C adalah : int b,k,i; int mat1[maks][maks],mat2[maks][maks],mat3[maks][maks]; int bm1=2,km1=2,bm2=2,km2=4; baca_matrik(mat1,bm1,km1); baca_matrik(mat2,bm2,km2); for(b=0;b