Rabu, 24 Juni 2009

Rangkuman Algoritma&Struktur data 2

Struktur data adalah: Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna.

Algoritma adalah: Urutan aksi-aksi yang dinyatakan dengan jelas untuk memecahkan suatu masalah dan merupakan logika dan tahapan urutan yang sistematis.
Dan selama belajar stuktur data ada banyak materi yang saya pelajari diantaranya:pointer,Array,linked list,stack,Queue,Structure dan tree. Saya akan menjelaskan satu persatu.

•Pointer
Pointer adalah: KONSEP DASAR
Pointer adalah tipe data yang digunakan untuk menyimpan alamat memori sebuah variable, BUKAN menyimpan nilai datanya.

contoh:
char, float, int, double, long, dsb operator bintang/ asterisk (*)
OPERATOR POINTER
o Operator ‘&’ : untuk mendapatkan alamat memori operand/ variable pointer.
o Operator ‘*’ : untuk mengakses nilai data operand/ variable pointer.

EXAMPLE

#include
main()
{
char *Alamat_X, X; // Alamat_X bertipe pointer char, sedang X bertipe char

X = ‘M’; // variable X diisi dengan karakter ‘M’
Alamat_X = &X; // simpan alamat variable X ke variable Alamat_X


printf(“Nilai Var X = %c ada di alamat memori %p \n”, *Alamat_X, Alamat_X);
}



•Array
Array adalah: Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.

VARIABEL ARRAY
nama_variabel[indeks]

ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .

DEKLARASI VARIABEL ARRAY

array: tipe nama_variabel[indeks];
Contoh : float bil[10];
deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.
Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
float bil[11]
contoh:
#include
#include
void main()
{
int i;
float data[3],rata;
cout<<"masukkan 3 buah data :\n";
//input data
for (i=0;i<3;i++)
{
cout<<"Data["<cin>>data[i];
}
cout<<"Data yang anda masukkan :\n";
//tampilkan data
for (i=0;i<3;i++)
cout<<"Data["<for (i=0;i<3;i++)
rata=rata+data[i];
rata=rata/3;
cout<<"rata rata data di atas : "<getch();
}
•Structure
Manfaat tipe data struct secara umum adalah untuk menyimpan paket (sekumpulan) data ke dalam satu buah nama variabel saja. Kumpulan data tersebut diikat sedemikian rupa menjadi satu. Kumpulan data di dalam sebuah struct bisa mempunyai tipe data dasar yang beraneka ragam. Kumpulan data dalam sebuah struct sangat dianjurkan membentuk sebuah kesatuan makna berkaitan dengan nama struct-nya. Misal, jika struct-nya bernama segitiga maka isi struct-nya antara lain: alas, tinggi, luas dan keliling.
Contoh:
#include
#include
struct mhs{
char nama [50];
int nilai;
};

void tampil (mhs masuk);

void main()
{
mhs mahasiswa;
clrscr();
cout<<"masukan nama: ";
cin>>mahasiswa.nama;
cout<<"masukan nilai: ";
cin>>mahasiswa.nilai;
{
if (mahasiswa.nilai>=0)&&(mahasiswa.nilai<=50)
cout<else if(mahasiswa.nilai>=51)&&(mahasiswa.nilai<=70)
cout<else if(mahasiswa.nilai>=71)&&(mahasiswa.nilai<=80)
cout<else(mahasiswa.nilai>=81)&&(mahasiswa.nilai<=100)
cout<}
tampil(mahasiswa);
getch();
}

void tampil(mhs masuk)
{
cout<<"hasilnya: "<}


•Linked list
Pengertian Linked list :
sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian
struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.
Bentuk Umum :

Infotype adalah sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list
Next adalah address dari elemen berikutnya (suksesor)

Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi :
FIRST L
Sebelum digunakan harus dideklarasikan terlebih dahulu :
Single Linked List
Pembuatan Single Linked List dapat menggunakan 2 metode:
• LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
• FIFO (First In First Out), aplikasinya : Queue (Antrean)
Double Linked List
Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List.
Circular Double Linked List
Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran.

Contoh:

#include
#include

int pilihan, x;

struct TNode{
int data;
TNode *next;
};

TNode *head;

void init(){
head = NULL;
}

int isEmpty(){
if(head == NULL) return 1;
else return 0;
}

void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;

if(isEmpty()==1){
head=baru;
head->next = NULL;
}
else{
baru->next = head;
head = baru;
}
cout<<"Data masuk \n";
}

void hapusDepan(){
TNode *hapus;
int d;;
if(isEmpty()==0){
if(head->next!=NULL){
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
}else{
d = head->data;
head = NULL;
}
cout<}else cout<<"Masih kosong\n";
getch();
}


void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<data<<" ";
bantu=bantu->next;
}
cout<}else cout<<"Masih kosong\n";
getch();
}

void main()
{
clrscr();
init();
do
{
clrscr();
cout<<"1.InsertDpan"<cout<<"2.HapusDepan"<cout<<"3.Tampil"<cout<<"4.Exit"<cout<cout<<"Pilihan = ";
cin>>pilihan;

switch(pilihan)
{
case 1:
{
{
cout<<"Masukan data="; cin>>x;
insertDepan(x);
}
break;
}
case 2:
{
{
hapusDepan();
}
break;
}
case 3:
{
{
tampil();
}
break;
}
}
}while(pilihan !=4);
getch();
}

•STACK
Adalah: LIFO stack
jenis kontainer adaptors, khusus dirancang untuk beroperasi dalam konteks LIFO (last-in first-out), di mana elemen dimasukkan dan hanya diambil dari akhir kontainer.

#include "stdio.h"
#include "conio.h"

typedef struct STACK {
int data [50];
int atas;
}
tumpukan;

STACK tumpuk;

void main() {
clrscr();
int pilihan, baru, i;
tumpuk.atas = -1;
do
{
clrscr ();
printf("1. Push Data\n");
printf("2. Pop Data\n");
printf("3. Print Data\n\n");
printf("Silahkan Masukan Pilihan Anda : \n");
scanf("%i", &pilihan);

switch (pilihan) {
case 1: {
if(tumpuk.atas== 5-1) {
printf("Tumpukan Penuh");
getch ();
} else {
printf("Data yang akan di Push = ");
scanf("%d",&baru);
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
} break; }

case 2: {
if (tumpuk.atas== -1) {
printf("Tumpukan Kosong");
getch();
} else {
printf("Data yang akan di Pop = %d", tumpuk.data[tumpuk.atas]);
tumpuk.atas--;
getch();
} break; }

case 3: {
if(tumpuk.atas==-1){
printf("Tumpukan Kosong");
getch();
} else {
printf("\nData yang ada ditumpukan adalah : \n\n");
for(i=0; i<=tumpuk.atas;i++){
printf("%d\n", tumpuk.data[i]);
} getch(); }
break; }

default : {
printf("\nTidak ada dalam pilihan");
}
}
} while(pilihan >=1 && pilihan <= 3);
getch();
}
•QUEUE
Queue adalah suatu linear list di mana operasi DELETE terjadi pada sisi depan (FRONT) dan operasi INSERT terjadi pada sisi belakang (REAR).
Jika diberikan suatu Queue Q dengan elemen-elemennya yang terdiri atas Q1, Q2, ....., QT maka queue Q dituliskan

Q = [ Q1, Q2, .........., QT ]

FRONT(Q) = Q1 REAR(Q) = QT
Selanjutnya untuk menyatakan jumlah elemen dalam suatu queue Q digunakan notasi NOEL(Q).
PRINSIP KERJA QUEUE
Prinsip kerja Queue adalah FIFO (First In First Out), di mana data yang masuk terlebih dahulu akan keluar pertama.
Contoh:
include
#include

void main()
{

int cek=0,data[10],x,hapus;
char pil;
do
{
clrscr();
cout<<"1.Tambah Antrian/Push"<cout<<"2.Hapus Antrian/Pop"<cout<<"3.Lihat Antrian"<cout<<"4.Keluar"<cout<<"Silahkan masukkan pilihan anda...";
pil=getche();
cout<cout<
if(pil=='1') //PUSH
{
if(cek==10)
cout<<"Antrian Penuh"<else
{
cout<<"Masukkan nilai-->"; cin>>x;
data[cek]=x;
cek++;
}
getch();
}
else
{
if(pil=='2') //POP
{
if(cek==0)
cout<<"Antrian kosong"<else
{
hapus=data[0];
for(int v=0;vdata[v]=data[v+1];
data[cek-1]=NULL;
cek--;
cout<<"Data dgn nilai="<}
getch();
}
else
{
if(pil=='3') //CEK DATA
{
if(cek==0)
cout<<"Antrian kosong."<
else
{
cout<for(int z=0;z{
cout<<"|";
cout<cout<<"|";
}

}
getch();
}
}
}
}while(pil='4');
}
.TREE

Tree merupakan salah satu bentuk struktur data bukan linier yang menggambarkan bentuk hierarki antara elemen-elemen. Tree biasanya terdiri dari root (akar) dan node-node (simpul-simpul) yang berada di bawah root. Struktur seperti tree sangat banyak sekali dgunakan dalam dunia nyata, misalnya: struktur organisasi suatu perusahaan, pengaturan filesystem, daftar isi sebuah buku, dan masih banyak lagi.
Ilustrasi struktur data tree:

Ilustrasi Tree
Degree (derajat) adalah jumlah edge yang keluar dan masuk dari sebuah node.
Contoh : node E memiliki in degree 1 dan out degree 2
Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0.
Subtree / child adalah bagian salah satu node dibawah root sampai ke bawah.
node F merupakan parent dari node J dan K
Ancestor adalah Node yang berada di atas node lain.
Descendant adalah node yang berada di bawah node lain.
Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0.
Sibling adalah node yang mempunyai level yang sama dan parent yang sama.
Height (ketinggian) adalah level tertinggi dari tree ditambah 1.
Weight (bobot) adalah jumlah leaf(daun) pada tree.


BINARY TREE
Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right subtree) dan kedua subtree tersebut harus terpisah, atau dengan kata lain tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child.
Binary tree terdiri dari :
1.Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama).
2.Complete Binary Tree : mirip dengan full binary tree, tetapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf memiliki 2 anak)
3.Skewed Binary Tree : binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak.
BINARY SEARCH TREE
Binary tree dengan sifat bahwa nilai dari semua left child harus lebih kecil daripada nilai dari right child dan parentnya.
(sumber google)

Kesimpulan:Algoritma adalah rangkaian alur,diamana didlalmnya banyak terdapat cara cara untuk membuat program.dan menyeesaikan masalah,melalui banyak program program yang ada.

Kesan:Menurut saya algoritma adalah pelajaran yang cukup sulit dan membutuhkan peran logika yang sangat besar,karena pada prinsinya setiap masalah yang kita hadapi dalam algoritma sangat diperlukan logika yang tepat dan benar.
Pesan:sebaiknya algorima harus kita kuasai,karena algoritma sangat penting.dan algoritma dalam ilmu computer sangat berkaitan erat.

Dan tips buat dosen algoritma saya,Pak Dody Sanjaya.menurut saya pak Dody adalah dosen yang baik,asyik,dan santai.pak dody dapat membuat pelajaran algoritma menjadi tidak membosankan dan cara mengajarnya pun enak.dan untuk kita mendapat nilai bagus di mata kuliah pak dody cukup mudah,yaitu kita rajin masuk kuliah dan berpenampilan yang rapi..terima kasih pak dody.

Selasa, 23 Juni 2009

pointer,linkedlist and sorting,searching&binary search di c++

Di blog ini saya akan menjelaskan tentang pemprograman algoritma dan struktur data 2.yang akan saya jelaskan adalah materi tentang pointer&linked list,sorting,searching&binary search.
Pertama saya akan menjelaskan tentang pointer.

POINTER

Pointer adalah sebuah variabel yang isi datanya adalah alamat memori atau variabel lain. Sehingga pointer dapat juga disebut sebagai variabel alamat (address variable).
Untuk mendeklarasikan sebuah pointer, perintah dasarnya adalah :

Typedata *namavariabel;
Untuk lebih jelasnya adalah :

int *pint;
float *pfloat;
Tmhs *pmhs;

Pada contoh ke-1 kita mendeklarasikan sebuah pointer bernama pint yang menunjuk ke suatu alamat di memori yang menampung sebuah data bertipe integer. Contoh ke-2 mendeklarasikan sebuah variabel pointer bernama pfloat yang menunjuk ke suatu alamat yang menampung sebuah data bertipe float, begitu juga dengan contoh ke-3 yang mendeklarasikan suatu variabel bernama pmhs yang menunjuk ke suatu data yang bertipe Tmhs.

Pengisian data ke variabel pointer bisa berarti pengisian alamat memori ke variabel tersebut atau pengisian data yang ditunjuk oleh pointer.
Untuk lebih jelasnya, perhatikan program dibawah ini :
01: #include
02: #include
03: #include
04:
05: main()
06: {
07: char c,*pc;
08: int i,*pi;
09: float f,*pf;
10: clrscr();
11: c='A';i=7;f=6.25;
12: printf("c : alamat=0x%p, isi=%c\n", &c, c);
13: printf("x : alamat=0x%p, isi=%d\n", &i, i);
14: printf("y : alamat=0x%p, isi=%5.2f\n", &f, f);
15: pc=&c;
16: pi=&i;
17: pf=&f;
18: printf("pc: alamat=0x%p, isi=%c\n", pc, *pc);
19: printf("pi: alamat=0x%p, isi=%d\n", pi, *pi);
20: printf("pf: alamat=0x%p, isi=%5.2f\n", pf, *pf);

21: *pc='B';
22: *pi=125;
23: *pf=512.56;
24: printf("c : isi=%c\n", c);
25: printf("x : isi=%d\n", i);
26: printf("y : isi=%5.2f\n", f);
27: getch();
28: return 0;
29: }

Jika dieksekusi, maka akan menghasilkan sebuah tampilan sebagai berikut :
c : alamat=0xFFF5, isi=A
x : alamat=0xFFF2, isi=7
y : alamat=0xFFEE, isi= 6.25
pc: alamat=0xFFF5, isi=A
pi: alamat=0xFFF2, isi=7
pf: alamat=0xFFEE, isi= 6.25
c : isi=B
x : isi=125
y : isi=512.56

Keterangan Program :
Pada baris 7 : Pendeklarasian sebuah variabel c dengan tipe char, dan sebuah pointer pc yang merupakan pointer char.
Pada baris 8 : Pendeklarasian sebuah variabel i dengan tipe int, dan sebuah pointer pi yang merupakan pointer int.
Pada baris 9 : Pendeklarasian sebuah variabel f dengan tipe int, dan sebuah pointer pf yang merupakan pointer float.
Pada baris 11 : Pengisian variabel c dengan karakter ‘A’, variabel i dengan nilai 7, dan variabel f dengan nilai 6.25.
Pada baris 12 : Menampilkan alamat variabel c dan isinya.
Pada baris 13 : Menampilkan alamat variabel i dan isinya.
Pada baris 14 : Menampilkan alamat variabel f dan isinya.
Pada baris 15 : Variabel pointer pc diisi dengan alamat variabel c sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pc diubah maka berarti merubah isi variabel c dan begitu juga sebaliknya.
Pada baris 15 : Variabel pointer pi diisi dengan alamat variabel i sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pi diubah maka berarti merubah isi variabel i dan begitu juga sebaliknya.
Pada baris 15 : Variabel pointer pf diisi dengan alamat variabel f sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pf diubah maka berarti merubah isi variabel f dan begitu juga sebaliknya.
Baris 16, 17 dan 18 : Menampilkan data yang ditunjuk oleh pointer pc, pi, dan pf, yang hasilnya pasti sama dengan hasil baris 12, 13, dan 14.
Baris 19 : Mengisi data ke alamat yang ditunjuk oleh pc dengan nilai B, yang berarti juga mengganti nilai variabel c.
Baris 20 : Mengisi data ke alamat yang ditunjuk oleh pi dengan nilai 125, yang berate juga mengganti nilai variabel i.
Baris 21 : Mengisi data ke alamat yang ditunjuk oleh pf dengan nilai 512.56, yang berarti juga mengganti nilai variabel f.
Baris 22,23 dan 24 : Menampilkan isi nilai variabel c, i dan f, yang telah diubah oleh variabel pointernya.

Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan).
Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime (ketika program berjalan).

01: #include
02: #include
03: #include
04: main()
05: {
06: int *data;
07: int i,banyakdata;
08: printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata);
09: data=(int *)malloc(sizeof(int)*banyakdata);
10: for(i=0;i11: {
12: printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i));
13: }
14: printf("Data yang telah diinputkan adalah : \n");
15: for(i=0;i16: printf("Data ke-%i : %i\n",i+1,*(data+i));
17: getch();
18: return 0;
19: }

Tampilan yang dihasilkan oleh program diatas adalah sebagai berikut :

Banyak data yang akan diinputkan : 5
Pemasukan data ke-1 :12
Pemasukan data ke-2 :3
Pemasukan data ke-3 :4
Pemasukan data ke-4 :5
Pemasukan data ke-5 :67
Data yang telah diinputkan adalah :
Data ke-1 : 12
Data ke-2 : 3
Data ke-3 : 4
Data ke-4 : 5
Data ke-5 : 67

Keterangan program :
Baris 6 : Pendeklarasian sebuah variabel pointer int yang bernama data.
Baris 7 : Pendeklarasian variabel i sebagai counter dan banyakdata untuk menyimpan banyaknya data.
Baris 8 : Pengisian data banyak data.
Baris 9 : Pemesanan alokasi di memori untuk variabel pointer data sebesar besarnya int (sizeof(int)) dikali dengan banyakdata.
Baris 10 : Perulangan untuk membaca data dari data ke-0 sampai ke banyakdata-1.
Baris 12 : Membaca data dari keyboard dan dimasukan ke alamat data pada urutan ke-i.
Baris 15 – 16 : Menampilkan isi data yang ditunjuk oleh pointer
Sumber:http://heryandi.net/programming/c/12-11-pointer.html)

LINKED LIST
Linked List adalah struktur data yang berbeda dengan struktur data array. Linked list dapat dibayangkan seperti rantai yang bersambung satu sama lainnya. Tiap-tiap rantai (node) terhubung dengan pointer.
Gambar berikut memperlihatkan sebuah Linked List.

Sebelum kita membahas lebih jauh tentang Linked List, alangkah baiknya bila kita mengulang sedikit tentang struct dan typedef. Struct atau structure dalam bahasa pemograman C/C++ digunakan untuk mendefinisikan tipe data yang memiliki anggota (member) bertipe tertentu. Berikut contoh dan cara mendeklarasi sebuah struct:
struct tgl {
int hari;
int bulan;
int tahun;
}

struct tgl Tanggal;

Bila divisualisasikan kira-kira sebagai berikut:


Contoh di atas memperlihatkan bagaimana mendeklarasi sebuah struct dengan nama struct tgl yang memiliki tiga member yaitu hari, bulan dan tahun yang bertipe int (integer). Kemudian, sebuah variabel Tanggal dideklarasikan bertipe struct tgl. Untuk mempersingkat dan menyederhanakan pendeklarasian sebuah struct, kata cadang typedef biasa digunakan. Sesuai namanya, typedef digunakan untuk mendefinisikan sebuah tipe data menjadi suatu alias tertentu. Perhatikan contoh berikut:

Dengan cara yang sama, pendeklarasian struct tgl di atas dapat disederhanakan menggunakan kata cadang typedef menjadi:
typedef struct tgl {
int hari;
int bulan;
int tahun;
} Date;

Date Tanggal;

Single Linked List
Linked list dapat dianalogikan sebagai rantai yang terdiri dari beberapa node yang saling terkait. Dengan memegang node terdepan, maka node-node yang saling terkait lainnya dapat kita telesuri.
Dengan hanya mencatat atau memegang alamat dari alokasi data bertipe struct root pada sebuah variabel LL maka keberadaan node-node dalam linked list tersebut dapat diketahui. Bila data-data dalam node berupa bilangan bulat, maka struct yang diperlukan untuk membentuk linked list adalah sebagai berikut:
typedef struct node * NodePtr;
typedef struct node {
int data;
NodePtr next;
}Node;

typedef struct root {
NodePtr head;
unsigned size;
}Root;

Root LL;

Penambahan Node Linked List
Bila setiap penambahan simpul pada linked list dilakukan pada bagian depan (paling dekat dengan head) maka kompleksitas yang diperlukan untuk menambah node baru dalam linked list konstan atau O(1). Penambahan sebuah node dengan nilai 3 pada linked list di atas dapat divisualisasikan sebagai berikut:


Penelusuran Node Linked List
Kompleksitas penelusuran (pencarian) node dalam linked list adalah linier atau O(n). Hal ini disebabkan karena node-node dalam linked list disusun secara acak (tidak berurut). Seandainya pun simpul-simpul dalam linked list disusun secara berurut, metode pencarian biner (binary search) tetap tidak dapat dipergunakan. Ada 2 alasan mengapa pencarian biner tidak dapat digunakan:
1. Linked list tidak memiliki indeks seperti array, sehingga akses langsung ke node tertentu tidak dapat dilakukan. Untuk menuju ke node tertentu, proses pemeriksaan tetap dimulai dari node head (node terdepan). Oleh karena itu proses pencarian selalu berjalan secara linier.
2. Tidak dapat membagi linked list menjadi 2 bagian yang sama besar seperti saat membagi array menjadi 2 bagian bila metode pencarian biner diaplikasikan pada array terurut.

Penghapusan Node Linked List
Sebelum proses penghapusan dilakukan, pencarian node yang ingin dihapus harus terlebih dahulu dilakukan. Bila node yang ingin dihapus ditemukan, suatu hal yang selalu harus diperhatikan adalah bagaimana mengeluarkan node tersebut dari linked list dan kemudian menyambung kembali linked list kembali. Kompleksitas menghapus sebuah node dalam linked list adalah O(n). Perhatikan gambar berikut ini:

Implementasi Linked List
/* linkedlist.h: header file */
typedef struct node * NodePtr;
typedef struct node {
int data;
NodePtr next;
}Node;

typedef struct list {
NodePtr head;
unsigned size;
}List;

Prototype function ditulis disini
void initList(List *);
int addList(List *, int);
void displayList(List *);
void freeList(List *);


/* linkedlist.c: implementasi method dilakukan dalam file ini */

#include "linkedlist.h"
#include
#include

void initList(List * lptr) {
lptr->head = NULL;
lptr->size = 0;
}

int addList(List * lptr, int data) {
NodePtr new;
new = malloc(sizeof(Node));
if(new == NULL) {
printf("Error dalam membuat alokasi memori\n");
return 0;
}
new->data = data;
new->next = lptr->head;
lptr->head = new;
lptr->size++;
return 1;
}

void displayList(List * lptr) {
NodePtr current = lptr->head;
printf("\n");
while(current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("null\n");
}

void freeList(List * lptr) {
NodePtr next=lptr->head;
NodePtr current=next;
while(current != NULL) {
next = current->next;
free(current);
current = next;
}
}


/* main.c */

#include
#include
#include "linkedlist.h"

int main(void) {
int i, n, data;
List LL;

initList(&LL); /* Buat initial linked list */

printf("Jumlah simpul = ");
scanf("%d", &n);

/* Input data simpul */
for(i=0; i printf("Data = ");
scanf("%d", &data);
addList(&LL, data);
}

displayList(&LL);
freeList(&LL);
return EXIT_SUCCESS;
sumber:
(http://www.keudekupi.com)


SORTING
PENGRUTAN DATA (SORTING)
Adalah suatu proses mengurutkan data yang sebelumnya disusun secara acak ata tidak teratur menjadi urt dan teratur menurut aturan tertntu. Tujuan ini dimaksudkan untuk mempermudah proses pemodifikasian selanjutnya. Ada bermacam-macam metode pengurutan, diantaranya yaitu:
1. Bubble sort
Adalah dengan cara membandingkan elemen yang sekarang dengan yang berikutnya, apabila elemen yang sekarang lebih besar daripada berikutnya maka posisi ditukar, kemudian data yang lebih besar tadi dibandingkan lagi dengan yang berikutnya, demikian seterusnya dengan aturan yang sama.
Contoh : 4, 12, 70, 60, 41, 11
4<12 70=" tetap">60= berubah :60, 70
70>41= berubah :41, 70
70>11= berubah :11, 70
hasil sementara = 4, 12, 60, 41, 11, 70 begitu serusnya
2. Quick sort
Adalah suatu metode pengurutan yang membandingkan suatu element (pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen yang lain yang lebih kecil daripada pivot terletak disebelah kiri pivot, sedangkan elemen yang lebih besar darimpivot diletakkan disebelah kanan pivot. Sehingga akan terbentuk dua sublist yaitu yang terletak disebelah kiri pivot dan disebelah kanan pivot.
Contoh : 20, 10, 15, 5, 8, 3
A : data 20, 10, (15), 5, 8, 3
i j
i berhenti pada posisi 1 karena langsung mendapakan nikai yang lebih besar dari pivort(15) yaitu 20
j berhenti pada posisi 6 karena langsung mendapakan nilai yang lebih kecil dari pivort(15) yaitu 3
sehingga data berubah menjadi
3, 10, 15, 5, 8, 20
B : 3, 10, 8, 5, 15, 20
C : 3, 5, 8, 10, 15, 20

3. Merge sort
Adalah sekumpulan data dibagi menjadi dua sama besar, kemudian bagiannya itu diurut sendiri2, lalu di gabung kembali dengan hasil yang telah terurut.

4. Selection sort
Adalah suatu metode pengurutan yang membandingkan elemen yang sekarang dengan element berikutnya sampai element yang terakhir. Jika ditemukan elemen lain yang lebih kecil maka dicatat posisinya dan langsung ditukar.
Misalkan data sebagai berikut : 5, 34, 32, 25, 75, 42, 22, 2
Maka prosesnya :
A : 5, 34, 32, 25, 75, 42, 22, 2
B : 2, 34, 32 ,25, 75, 42, 22, 5
C : 2, 5, 32, 25, 75, 42, 22, 34
D : 2, 5, 22, 25, 32, 34, 75, 42
E : 2, 5, 22, 25, 32, 34, 42, 75


contoh program array c++
mencarin data dalam variable array
#include
#include
#include

int main () {
int a[10] = {5,12,24,53,26,17,62,36,68};
int cari;

for (int i=0; i<10; i++)
{ cout<<”data baris ke-“<<<” = “<
cout<
cout<<”masukkan data yang dicari : “;
cin>>cari;
for (int j=0; j<10; j++)
{ if a[j] == cari
{ cout<<”nilai yangh dicari berada pada indeks ke- “<
else { cout<< “data yang dicari tidak ditemukan”; }
return o;
getch ( ) :
}
Sumber:(http://erulanak-kendal.blogspot.com)
SEARCHING&BINARY SEARCH
1. Pengertian Searching
Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data.
2. Metode pencarian dibagi menjadi 2, yaitu:
1. Metode Pencarian Beruntun
Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir.
2. Metode Pencarian Bagi Dua (Binary Search)
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini.
Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data yang akan dicari. Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian sebaliknya untuk data yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut.
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;
Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.
contoh script 1:
//#include
#include
#include
//#pragma hdrstop
//#pragma argsused
int main(int argc , char* argv[])
{
int x,i,k;
int l[10]={20,15,22,30,60,28,17,18,21,22};
printf(”Data yang dicari = “); scanf(”%d”,&x);
k=0;
for(i=0;i<9;i++)
{
if(l[i]==x)
{
printf("Data ditemukan di elemen %d\n",i);
k++;
}
}
if(k==0)
{
printf("Data tidak ditemukan\n");
}
printf("Jumlah data yang ditemukan = %d",k);
getch();
return 0;
}
contoh script 2:
//#include
//#include hrdstop
#include
#include
//#pragma argsused
int main(int argc, char* argv[])
{
int X,i,j,k,p;
int L[10]={12,14,15,17,23,25,45,67,68,70};
/*Menentukan apakah terurut menaik atau menurun*/
/*Variabel p digunakan untuk kode, apakah menaik atau menurun*/
/*Jika p=0, maka data terurut menaik*/
/*Jika p=1, maka data terurut menurun*/
if (L[0]{
printf("Data terurut menarik \n");
p=0;
}
else
{
printf("Data terurut menurun \n");
p=1;
}
/*input data X yang akan dicari*/
printf("Data yang dicari="); scanf("%d",&X);
/*Penentuan indeks awal dan akhir semula*/
i=0;
j=9;
/*proses perulangan untuk menentukan nilai tengah k */
do
{
k=(i+j)/2;
if (p==0) //jika data terurut menaik
{
if (L[k]==X)
{
printf ("Data ditemukan di elemen %d",k);
getch();
return 0; //langsung keluar program
}
else if(L[k]X)
{
i=k;
}
else
{
j=k;
}
}
}
while(k!=0); //sampai nilai k=0, iterasi berakhir
printf(”data tida ditemukan!!”);
getch();
return 0;
}

(Sumber: http://lusiajah.wordpress.com)


Selasa, 16 Juni 2009

Pointer,Linked list dan Sorting dalam c++

POINTER

Pointer adalah sebuah variabel yang isi datanya adalah alamat memori atau variabel lain. Sehingga pointer dapat juga disebut sebagai variabel alamat (address variable).

Untuk mendeklarasikan sebuah pointer, perintah dasarnya adalah :

Typedata *namavariabel;

Untuk lebih jelasnya adalah :

int *pint;

float *pfloat;

Tmhs *pmhs;

Pada contoh ke-1 kita mendeklarasikan sebuah pointer bernama pint yang menunjuk ke suatu alamat di memori yang menampung sebuah data bertipe integer. Contoh ke-2 mendeklarasikan sebuah variabel pointer bernama pfloat yang menunjuk ke suatu alamat yang menampung sebuah data bertipe float, begitu juga dengan contoh ke-3 yang mendeklarasikan suatu variabel bernama pmhs yang menunjuk ke suatu data yang bertipe Tmhs.


Pengisian data ke variabel pointer bisa berarti pengisian alamat memori ke variabel tersebut atau pengisian data yang ditunjuk oleh pointer.

Untuk lebih jelasnya, perhatikan program dibawah ini :

01: #include

02: #include

03: #include

04:

05: main()

06: {

07: char c,*pc;

08: int i,*pi;

09: float f,*pf;

10: clrscr();

11: c='A';i=7;f=6.25;

12: printf("c : alamat=0x%p, isi=%c\n", &c, c);

13: printf("x : alamat=0x%p, isi=%d\n", &i, i);

14: printf("y : alamat=0x%p, isi=%5.2f\n", &f, f);

15: pc=&c;

16: pi=&i;

17: pf=&f;

18: printf("pc: alamat=0x%p, isi=%c\n", pc, *pc);

19: printf("pi: alamat=0x%p, isi=%d\n", pi, *pi);

20: printf("pf: alamat=0x%p, isi=%5.2f\n", pf, *pf);

21: *pc='B';

22: *pi=125;

23: *pf=512.56;

24: printf("c : isi=%c\n", c);

25: printf("x : isi=%d\n", i);

26: printf("y : isi=%5.2f\n", f);

27: getch();

28: return 0;

29: }

Jika dieksekusi, maka akan menghasilkan sebuah tampilan sebagai berikut :

c : alamat=0xFFF5, isi=A

x : alamat=0xFFF2, isi=7

y : alamat=0xFFEE, isi= 6.25

pc: alamat=0xFFF5, isi=A

pi: alamat=0xFFF2, isi=7

pf: alamat=0xFFEE, isi= 6.25

c : isi=B

x : isi=125

y : isi=512.56

Keterangan Program :

* Pada baris 7 : Pendeklarasian sebuah variabel c dengan tipe char, dan sebuah pointer pc yang merupakan pointer char.

* Pada baris 8 : Pendeklarasian sebuah variabel i dengan tipe int, dan sebuah pointer pi yang merupakan pointer int.

* Pada baris 9 : Pendeklarasian sebuah variabel f dengan tipe int, dan sebuah pointer pf yang merupakan pointer float.

* Pada baris 11 : Pengisian variabel c dengan karakter ‘A’, variabel i dengan nilai 7, dan variabel f dengan nilai 6.25.

* Pada baris 12 : Menampilkan alamat variabel c dan isinya.

* Pada baris 13 : Menampilkan alamat variabel i dan isinya.

* Pada baris 14 : Menampilkan alamat variabel f dan isinya.

* Pada baris 15 : Variabel pointer pc diisi dengan alamat variabel c sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pc diubah maka berarti merubah isi variabel c dan begitu juga sebaliknya.

* Pada baris 15 : Variabel pointer pi diisi dengan alamat variabel i sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pi diubah maka berarti merubah isi variabel i dan begitu juga sebaliknya.

* Pada baris 15 : Variabel pointer pf diisi dengan alamat variabel f sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pf diubah maka berarti merubah isi variabel f dan begitu juga sebaliknya.

* Baris 16, 17 dan 18 : Menampilkan data yang ditunjuk oleh pointer pc, pi, dan pf, yang hasilnya pasti sama dengan hasil baris 12, 13, dan 14.

* Baris 19 : Mengisi data ke alamat yang ditunjuk oleh pc dengan nilai B, yang berarti juga mengganti nilai variabel c.

* Baris 20 : Mengisi data ke alamat yang ditunjuk oleh pi dengan nilai 125, yang berate juga mengganti nilai variabel i.

* Baris 21 : Mengisi data ke alamat yang ditunjuk oleh pf dengan nilai 512.56, yang berarti juga mengganti nilai variabel f.

* Baris 22,23 dan 24 : Menampilkan isi nilai variabel c, i dan f, yang telah diubah oleh variabel pointernya.

Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan).

Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].

Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime (ketika program berjalan).

01: #include

02: #include

03: #include

04: main()

05: {

06: int *data;

07: int i,banyakdata;

08: printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata);

09: data=(int *)malloc(sizeof(int)*banyakdata);

10: for(i=0;i

11: {

12: printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i));

13: }

14: printf("Data yang telah diinputkan adalah : \n");

15: for(i=0;i

16: printf("Data ke-%i : %i\n",i+1,*(data+i));

17: getch();

18: return 0;

19: }

Tampilan yang dihasilkan oleh program diatas adalah sebagai berikut :

Banyak data yang akan diinputkan : 5

Pemasukan data ke-1 :12

Pemasukan data ke-2 :3

Pemasukan data ke-3 :4

Pemasukan data ke-4 :5

Pemasukan data ke-5 :67

Data yang telah diinputkan adalah :

Data ke-1 : 12

Data ke-2 : 3

Data ke-3 : 4

Data ke-4 : 5

Data ke-5 : 67

Keterangan program :

* Baris 6 : Pendeklarasian sebuah variabel pointer int yang bernama data.

* Baris 7 : Pendeklarasian variabel i sebagai counter dan banyakdata untuk menyimpan banyaknya data.

* Baris 8 : Pengisian data banyak data.

* Baris 9 : Pemesanan alokasi di memori untuk variabel pointer data sebesar besarnya int (sizeof(int)) dikali dengan banyakdata.

* Baris 10 : Perulangan untuk membaca data dari data ke-0 sampai ke banyakdata-1.

* Baris 12 : Membaca data dari keyboard dan dimasukan ke alamat data pada urutan ke-i.

* Baris 15 – 16 : Menampilkan isi data yang ditunjuk oleh pointer

Sumber:http://heryandi.net/programming/c/12-11-pointer.html)

Linked List

Linked List adalah struktur data yang berbeda dengan struktur data array. Linked list dapat dibayangkan seperti rantai yang bersambung satu sama lainnya. Tiap-tiap rantai (node) terhubung dengan pointer.

Gambar berikut memperlihatkan sebuah Linked List.

Image

Sebelum kita membahas lebih jauh tentang Linked List, alangkah baiknya bila kita mengulang sedikit tentang struct dan typedef. Struct atau structure dalam bahasa pemograman C/C++ digunakan untuk mendefinisikan tipe data yang memiliki anggota (member) bertipe tertentu. Berikut contoh dan cara mendeklarasi sebuah struct:

struct tgl {

int hari;

int bulan;

int tahun;

}

struct tgl Tanggal;

Bila divisualisasikan kira-kira sebagai berikut:


Image

Dengan cara yang sama, pendeklarasian struct tgl di atas dapat disederhanakan menggunakan kata cadang typedef menjadi:

typedef struct tgl {

int hari;

int bulan;

int tahun;

} Date;

Date Tanggal;


Single Linked List

Linked list dapat dianalogikan sebagai rantai yang terdiri dari beberapa node yang saling terkait. Dengan memegang node terdepan, maka node-node yang saling terkait lainnya dapat kita telesuri.

Dengan hanya mencatat atau memegang alamat dari alokasi data bertipe struct root pada sebuah variabel LL maka keberadaan node-node dalam linked list tersebut dapat diketahui. Bila data-data dalam node berupa bilangan bulat, maka struct yang diperlukan untuk membentuk linked list adalah sebagai berikut:

typedef struct node * NodePtr;

typedef struct node {

int data;

NodePtr next;

}Node;

typedef struct root {

NodePtr head;

unsigned size;

}Root;

Root LL;

Penambahan Node Linked List

Bila setiap penambahan simpul pada linked list dilakukan pada bagian depan (paling dekat dengan head) maka kompleksitas yang diperlukan untuk menambah node baru dalam linked list konstan atau O(1). Penambahan sebuah node dengan nilai 3 pada linked list di atas dapat divisualisasikan sebagai berikut:

Image


Penelusuran Node Linked List

Kompleksitas penelusuran (pencarian) node dalam linked list adalah linier atau O(n). Hal ini disebabkan karena node-node dalam linked list disusun secara acak (tidak berurut). Seandainya pun simpul-simpul dalam linked list disusun secara berurut, metode pencarian biner (binary search) tetap tidak dapat dipergunakan. Ada 2 alasan mengapa pencarian biner tidak dapat digunakan:

1. Linked list tidak memiliki indeks seperti array, sehingga akses langsung ke node tertentu tidak dapat dilakukan. Untuk menuju ke node tertentu, proses pemeriksaan tetap dimulai dari node head (node terdepan). Oleh karena itu proses pencarian selalu berjalan secara linier.

2. Tidak dapat membagi linked list menjadi 2 bagian yang sama besar seperti saat membagi array menjadi 2 bagian bila metode pencarian biner diaplikasikan pada array terurut.

Penghapusan Node Linked List

Sebelum proses penghapusan dilakukan, pencarian node yang ingin dihapus harus terlebih dahulu dilakukan. Bila node yang ingin dihapus ditemukan, suatu hal yang selalu harus diperhatikan adalah bagaimana mengeluarkan node tersebut dari linked list dan kemudian menyambung kembali linked list kembali. Kompleksitas menghapus sebuah node dalam linked list adalah O(n). Perhatikan gambar berikut ini:

Image

Implementasi Linked List

/* linkedlist.h: header file */

typedef struct node * NodePtr;

typedef struct node {

int data;

NodePtr next;

}Node;

typedef struct list {

NodePtr head;

unsigned size;

}List;

Prototype function ditulis disini

void initList(List *);

int addList(List *, int);

void displayList(List *);

void freeList(List *);

/* linkedlist.c: implementasi method dilakukan dalam file ini */

#include "linkedlist.h"

#include

#include

void initList(List * lptr) {

lptr->head = NULL;

lptr->size = 0;

}

int addList(List * lptr, int data) {

NodePtr new;

new = malloc(sizeof(Node));

if(new == NULL) {

printf("Error dalam membuat alokasi memori\n");

return 0;

}

new->data = data;

new->next = lptr->head;

lptr->head = new;

lptr->size++;

return 1;

}

void displayList(List * lptr) {

NodePtr current = lptr->head;

printf("\n");

while(current != NULL) {

printf("%d -> ", current->data);

current = current->next;

}

printf("null\n");

}

void freeList(List * lptr) {

NodePtr next=lptr->head;

NodePtr current=next;

while(current != NULL) {

next = current->next;

free(current);

current = next;

}

}

/* main.c */

#include

#include

#include "linkedlist.h"

int main(void) {

int i, n, data;

List LL;

initList(&LL); /* Buat initial linked list */

printf("Jumlah simpul = ");

scanf("%d", &n);

/* Input data simpul */

for(i=0; i

printf("Data = ");

scanf("%d", &data);

addList(&LL, data);

}

displayList(&LL);

freeList(&LL);

return EXIT_SUCCESS;

sumber:

(http://www.keudekupi.com)


SORTING
PENGRUTAN DATA (SORTING)
Adalah suatu proses mengurutkan data yang sebelumnya disusun secara acak ata tidak teratur menjadi urt dan teratur menurut aturan tertntu. Tujuan ini dimaksudkan untuk mempermudah proses pemodifikasian selanjutnya. Ada bermacam-macam metode pengurutan, diantaranya yaitu:
1. Bubble sort
Adalah dengan cara membandingkan elemen yang sekarang dengan yang berikutnya, apabila elemen yang sekarang lebih besar daripada berikutnya maka posisi ditukar, kemudian data yang lebih besar tadi dibandingkan lagi dengan yang berikutnya, demikian seterusnya dengan aturan yang sama.
Contoh : 4, 12, 70, 60, 41, 11
4<12 70=" tetap">60= berubah :60, 70
70>41= berubah :41, 70
70>11= berubah :11, 70
hasil sementara = 4, 12, 60, 41, 11, 70 begitu serusnya
2. Quick sort
Adalah suatu metode pengurutan yang membandingkan suatu element (pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen yang lain yang lebih kecil daripada pivot terletak disebelah kiri pivot, sedangkan elemen yang lebih besar darimpivot diletakkan disebelah kanan pivot. Sehingga akan terbentuk dua sublist yaitu yang terletak disebelah kiri pivot dan disebelah kanan pivot.
Contoh : 20, 10, 15, 5, 8, 3
A : data 20, 10, (15), 5, 8, 3
i j
i berhenti pada posisi 1 karena langsung mendapakan nikai yang lebih besar dari pivort(15) yaitu 20
j berhenti pada posisi 6 karena langsung mendapakan nilai yang lebih kecil dari pivort(15) yaitu 3
sehingga data berubah menjadi
3, 10, 15, 5, 8, 20
B : 3, 10, 8, 5, 15, 20
C : 3, 5, 8, 10, 15, 20

3. Merge sort
Adalah sekumpulan data dibagi menjadi dua sama besar, kemudian bagiannya itu diurut sendiri2, lalu di gabung kembali dengan hasil yang telah terurut.

4. Selection sort
Adalah suatu metode pengurutan yang membandingkan elemen yang sekarang dengan element berikutnya sampai element yang terakhir. Jika ditemukan elemen lain yang lebih kecil maka dicatat posisinya dan langsung ditukar.
Misalkan data sebagai berikut : 5, 34, 32, 25, 75, 42, 22, 2
Maka prosesnya :
A : 5, 34, 32, 25, 75, 42, 22, 2
B : 2, 34, 32 ,25, 75, 42, 22, 5
C : 2, 5, 32, 25, 75, 42, 22, 34
D : 2, 5, 22, 25, 32, 34, 75, 42
E : 2, 5, 22, 25, 32, 34, 42, 75


contoh program array c++
mencarin data dalam variable array
#include
#include
#include

int main () {
int a[10] = {5,12,24,53,26,17,62,36,68};
int cari;

for (int i=0; i<10; i++)
{ cout<<”data baris ke-“<<<” = “<
cout<
cout<<”masukkan data yang dicari : “;
cin>>cari;
for (int j=0; j<10; j++)
{ if a[j] == cari
{ cout<<”nilai yangh dicari berada pada indeks ke- “<
else { cout<< “data yang dicari tidak ditemukan”; }
return o;
getch ( ) :
}
Sumber:(http://erulanak-kendal.blogspot.com)