tentang_algoritma
tentang algo dan c++
A. Selection
pada kali ini kita akan membahas tentang salah satu fungsi yang sering digunakan dalam c++. jadi selection (memilih), sistem akan melakukan suatu suatu fungsi ketika sistem memperoleh instruksi dan ketika dalam percobaan, sesuai dengan kondisi yang ditentukan program.
ada beberapa jenis selection yaitu.
a. if
dalam jenis ini, ketika program menjalankan suatu statement dimana statement yang dijalankan sesuai dengan kondisi boolean, maka sistem akan dijalankan. dan sebaliknya jika sistem tidak sesuai dengan kondisi boolean.
(pada cth dibawah, maka program akan mengoutput lebih besar dari 5 jika a>5.)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a)
if(a>5)
{
print("lebih besar dari 5")
}
return 0;
}
b. else if
disini statement memiliki 2 kondisi berbeda dan program akan berjalan ketika memenuhi salah satu kondisi boolean tersebut.
(pada cth dibawah, maka program akan mengoutput lebih besar dari 5 jika a>5.
tetapi, ketika dibawah 5 , program akan mengoutput kurang dari 5.)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a>5)
{
print("lebih besar dari 5");
}else{
print("kurang dari 5");
}
return 0;
}
c. nested if
disini if terjadi lebih dari sekali dalam pernyataan if.
(maka akan print 2 statement didalamnya)
cth:
#include<Stdio.h>
int main()
{
int a;
scanf("%d",&a);
{
if(a<0)
{
printf("bilangan negatif\n");
}
if(a<10)
{
printf("bukan bilangan Bulat.\n");
}
}
return 0;
}
d.switch case
sama seperti kegunaan if else, tetapi hanya digunakan ketika kodingan menjadi lebih banyak.
(ini hanya kodingan sederhana, biasanya lebih pembuatan multiple kodingan dalam satu source file)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
switch(a)
{
case 1:
printf("ini case 1\n");break;
case 2:
printf("ini case 2\n");break;
}
return 0;
}
B. Repetiton
Satu atau lebih instruksi diulang untuk jumlah waktu tertentu. beberapa program yang digunakan dalam repetiton ini adalah.
pd while, akan looping ketuka x<=10 ketika pengulangan while, x akan bertambah hingga kondisi tidak tercapai.
3. Do-While
do{
< statements >;
} while(exp);
sistem akan tetap berjalan ketika ekspresi boolean benar. dan evaluasi exp dilakukan setelah mengeksekusi pernyataan
do{
<statement>;
} while (exp);
C. Pointer and Array
1. Pointer
digunakan untuk penyampung alamat dari suatu variable
cth:
int i, *ptr;
ptr = &i;
To assign a new value to the variable pointed by the pointer:
*ptr = 5; /* means i=5 */
dan ada juga namanya pointer ke pointer
cth:
int i, *ptr, **ptr_ptr;
ptr = &i;
ptr_ptr = &ptr;
To assign new value to i:
*ptr = 5; // means i=5 ;
**ptr_ptr = 9; // means i=9; or
*ptr=9;
2.Array
beberapa jenis array:
1.array one dimension
#include<stdio.h>
int SIZE = 5;
void main() {
int i, j;
int n[SIZE] = {15, 9, 1, 7, 5};
for( i=0 ; i<= SIZE ; i++) {
printf("%5d ", n[i]);
for ( j=1; j<=n[i] ; j++) printf("%c","*");
printf("\n");
2.array two dimension
Syntax 2D Array:
cth:
#include<stdio.h>
int maximum (int x, int y)
{
int max = x;
if ( y > max)
max = y;
return max;
}
int main()
{
int a,b;
printf("Input 2 even values : ");
scanf("%d %d", &a, &b);
printf("Largest value is : %d\n",maximum(a,b));
}
adapun yang namanya Untuk memastikan suatu fungsi diketahui oleh inisiator / pemanggil. terdapat pada int maximum (int x, int y)
passing parameter
akan terjadi ketika jika data atau nilai dan keluar menggunakan parameter. terbagi menjadi 2 jenis yaitu:
By- Value: module lain yang dikirim adalah valuenya
By- Location yang dikirm oleh module lain adalah alamat
Sorting and Searching
A. Selection
pada kali ini kita akan membahas tentang salah satu fungsi yang sering digunakan dalam c++. jadi selection (memilih), sistem akan melakukan suatu suatu fungsi ketika sistem memperoleh instruksi dan ketika dalam percobaan, sesuai dengan kondisi yang ditentukan program.
ada beberapa jenis selection yaitu.
a. if
dalam jenis ini, ketika program menjalankan suatu statement dimana statement yang dijalankan sesuai dengan kondisi boolean, maka sistem akan dijalankan. dan sebaliknya jika sistem tidak sesuai dengan kondisi boolean.
(pada cth dibawah, maka program akan mengoutput lebih besar dari 5 jika a>5.)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a)
if(a>5)
{
print("lebih besar dari 5")
}
return 0;
}
b. else if
disini statement memiliki 2 kondisi berbeda dan program akan berjalan ketika memenuhi salah satu kondisi boolean tersebut.
(pada cth dibawah, maka program akan mengoutput lebih besar dari 5 jika a>5.
tetapi, ketika dibawah 5 , program akan mengoutput kurang dari 5.)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a>5)
{
print("lebih besar dari 5");
}else{
print("kurang dari 5");
}
return 0;
}
c. nested if
disini if terjadi lebih dari sekali dalam pernyataan if.
(maka akan print 2 statement didalamnya)
cth:
#include<Stdio.h>
int main()
{
int a;
scanf("%d",&a);
{
if(a<0)
{
printf("bilangan negatif\n");
}
if(a<10)
{
printf("bukan bilangan Bulat.\n");
}
}
return 0;
}
d.switch case
sama seperti kegunaan if else, tetapi hanya digunakan ketika kodingan menjadi lebih banyak.
(ini hanya kodingan sederhana, biasanya lebih pembuatan multiple kodingan dalam satu source file)
cth:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
switch(a)
{
case 1:
printf("ini case 1\n");break;
case 2:
printf("ini case 2\n");break;
}
return 0;
}
B. Repetiton
Satu atau lebih instruksi diulang untuk jumlah waktu tertentu. beberapa program yang digunakan dalam repetiton ini adalah.
-for
-while
-do while
1. Do
for(exp1;
exp2; exp3) statement;
perbedaan antara for dan while:
or:
for(exp1;
exp2; exp3){
statement1;
statement2;
…….
}
exp1
: initialization
exp2
: conditional
exp3
: increment or
decrement
exp1,
exp2 and exp3 are optional
contoh sederhana pada pengunaan for adalah print out angka dari 1 hingga 10
#include<stdio.h>
int
main()
{
int x;
for( x = 1
; x <= 10
; x++ )
printf( "%d ", x );
return(0);
}
output akan keluar 1 2 3 4 5 6 7 8 9 10
pada pengunaan for, ada terjadi beberapa hal dalam konsep ini yaitu:
a.infinity loop
terjadi karena parameter suatu sistem tidak memiliki kondisi sehingga program akan berulang. untuk mencegahnya, diperlukan pengunaan break.
b. nested loop
adanya pengunaan for didalam for. biasanya dimulai dari loop bagian dalam.
cth:
for (int x=1;x<=5;x++)
for (int y=5; y>=1; y--)
printf(”%d %d ”,x,y);
2.while
while
(exp) statements;
or:
while(exp){
statement1;
statement2;
…..
}
exp adalah ekspresi boolean seperti counter<=10 dibawah.
contoh :
int counter = 1;
while ( counter <= 10 )
{
printf( "%d\n", counter
);
++counter;
}
//for
#include<stdio.h>
void
main() {
int x;
for( x = 1
; x <= 10
; x++ )
printf( "%d\n", x );
}
//while
#include<stdio.h>
void
main() {
int x = 1;
while (x<=10) {
printf( "%d\n", x );
x++;
}
}
pd for akan dimulai ketika x=1, ketika x<=10 adalah syarat terjadinya looping, x++ akan menentukan x akan penjumlahan atau pengurangan hingga syarat looping tidak terjadi lagi.pd while, akan looping ketuka x<=10 ketika pengulangan while, x akan bertambah hingga kondisi tidak tercapai.
3. Do-While
do{
< statements >;
} while(exp);
sistem akan tetap berjalan ketika ekspresi boolean benar. dan evaluasi exp dilakukan setelah mengeksekusi pernyataan
Contoh:
do{
printf(”%d\n”,counter)
}
while(++counter <=10);
-dalam operasi while,pernyataan tidak dapat dijalankan jika nilai dalam exp salah
-Di do-while di sisi lain pernyataan pernyataan akan dieksekusi min sekali
BREAK DAN CONTINUE
Break digunakan untuk menghentikan paksa suatu loop, sedangkan continue lewati
semua sisa pernyataan (setelah pernyataan skip) di dalam pengulangan, dan lanjutkan
secara normal ke loop berikutnya.
cth:
break:
#include
<stdio.h>
int
main()
{
int x;
for(x=1; x<=10; x++)
{
if (x == 5) break;
printf("%d ", x);
}
return 0;
}
Output=1 2 3 4
continue:
#include <stdio.h>
int main()
{
int x;
for(x=1; x<=10; x++)
{
if (x == 5) continue;
printf("%d ", x);
}
return 0;
}
output=1 2 3 4 6 7 8 9 10
1. Pointer
digunakan untuk penyampung alamat dari suatu variable
cth:
int i, *ptr;
ptr = &i;
To assign a new value to the variable pointed by the pointer:
*ptr = 5; /* means i=5 */
dan ada juga namanya pointer ke pointer
cth:
int i, *ptr, **ptr_ptr;
ptr = &i;
ptr_ptr = &ptr;
To assign new value to i:
*ptr = 5; // means i=5 ;
**ptr_ptr = 9; // means i=9; or
*ptr=9;
2.Array
beberapa jenis array:
1.array one dimension
#include<stdio.h>
int SIZE = 5;
void main() {
int i, j;
int n[SIZE] = {15, 9, 1, 7, 5};
for( i=0 ; i<= SIZE ; i++) {
printf("%5d ", n[i]);
for ( j=1; j<=n[i] ; j++) printf("%c","*");
printf("\n");
2.array two dimension
Syntax 2D Array:
type name_array[row][col];
cth:
#include <stdio.h>
void main() {
int
two_dim[3][5] = {1, 2, 3, 4, 5,
10, 20, 30, 40, 50,
100, 200, 300, 400, 500};
int
i, j;
for
(i=0; i<3; i++){
for
(j=0; j<5; j++) printf("%6d", two_dim[i][j]);
printf("\n");
}
}
Output:
1 2 3 4 5
10 20 30 40 50
100 200 300 400 500
3. array three dimension
type name_array[row][col][depth];
•
•Example:
int x[3][2][4] = { { {1,2,3,4}, {5,6,7,8} },
{ {11,12,13,14},
{15,16,17,18} },
{ {21,22,23,24},
{25,26,27,28} }
};
void
main() {
int x[4][3][5]
= {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}},
{{9,
7, 5}, {5, 7, 2}, {9}},
{{3,
3, 5}, {2, 8, 9, 9}, {1, 2, 1}},
{{0},
{1}, {0, 1, 9}}
};
printf(“%5d”,
x[2][1][3]);
}
3.string
String adalah karakter array yang diakhiri dengan karakter null (‘\ 0’ atau dalam ASCII = 0)
Cth string inisialisasi:
char
s[ ] = ”BiNus”;
Similar to :
char s[ ] =
{’B’,’i’,’N’,’u’,’s’,’\0’};
Dalam Fungsi Perpustakaan Standar (file header string.h) menyediakan fungsi untuk memanipulasi string:
strlen ()
Kembalikan nilai panjang string; excluded null char
strcpy (s1, s2)
Salin s2 ke s1
strncpy (s1, s2, n)
Salin karakter n pertama dari s2 ke s1
strcat (s1, s2)
Menambahkan string s2 ke ujung string s1
strncat (s1, s2, n)
Menambahkan karakter n dari string s2 ke ujung string s1
strcmp (s1, s2)
Membandingkan nilai string s1 dan s2, jika pengembalian serupa 0
dll.
Function and recursive
Program dapat terbagi menjadi beberapa module yang disebut sebagai function. disini program utama akan pecah menjadi beberapa program sederhana dan terpisah dari program utama yang disebut sub-program. untuk memanggil sub-program, diperlukan module supaya sub-module dapat digunakan program.
beberapa kegunaan dari module:
1.Desain top-down dengan sub tujuan, program besar dibagi menjadi modul yang lebih kecil 2.Dapat dilakukan oleh lebih dari satu pengembang / programmer 3.Lebih mudah untuk melakukan debug, karena alur logis mudah diikuti dan lebih mudah untuk menandai kesalahan titik 4.Modifikasi dapat dilakukan tanpa mempengaruhi keseluruhan kode 5.Lebih mudah untuk didokumentasikan
{
statement;
}
return-value-type: tipe data dari nilai yang dikembalikan
Function and recursive
Program dapat terbagi menjadi beberapa module yang disebut sebagai function. disini program utama akan pecah menjadi beberapa program sederhana dan terpisah dari program utama yang disebut sub-program. untuk memanggil sub-program, diperlukan module supaya sub-module dapat digunakan program.
beberapa kegunaan dari module:
1.Desain top-down dengan sub tujuan, program besar dibagi menjadi modul yang lebih kecil 2.Dapat dilakukan oleh lebih dari satu pengembang / programmer 3.Lebih mudah untuk melakukan debug, karena alur logis mudah diikuti dan lebih mudah untuk menandai kesalahan titik 4.Modifikasi dapat dilakukan tanpa mempengaruhi keseluruhan kode 5.Lebih mudah untuk didokumentasikan
DFFunction dapat dituliskan dengan cara sebagai berikut:
return-value-type nama function(parameter){
statement;
}
return-value-type: tipe data dari nilai yang dikembalikan
Jika tidak diisi, maka tipe data default akan digunakan (bilangan bulat default)
Jika return-value-type batal maka fungsi tidak akan mengembalikan nilai
Daftar parameter: daftar nilai yang dikirim dari inisiator fungsi (pengguna)
cth:
#include<stdio.h>
int maximum (int x, int y)
{
int max = x;
if ( y > max)
max = y;
return max;
}
int main()
{
int a,b;
printf("Input 2 even values : ");
scanf("%d %d", &a, &b);
printf("Largest value is : %d\n",maximum(a,b));
}
adapun yang namanya Untuk memastikan suatu fungsi diketahui oleh inisiator / pemanggil. terdapat pada int maximum (int x, int y)
passing parameter
akan terjadi ketika jika data atau nilai dan keluar menggunakan parameter. terbagi menjadi 2 jenis yaitu:
By- Value: module lain yang dikirim adalah valuenya
By- Location yang dikirm oleh module lain adalah alamat
cth passing by value:
#include <stdio.h>
void Line (char
x
) { /* x is Formal Parameter*/
{
int i; / *i, x are Local Variable */
for (i = 1; i<=10; i++) printf(“%c”,x);
}
/*Main Program*/
int main()
{
char A =
’-’;
Line(A);
/* A is Actual Parameter */
}
cth by location:
#include <stdio.h>
void Calculate (int X, int Y, int
*P, int *Q)
{
*P = X
+ Y;
*Q = X
* Y;
}
void main()
{
int
X, Y, P, Q; /*local variable*/
printf(“
X=”); scanf(“%d”,&X);
printf(“
Y=”); scanf(“%d”,&Y);
Calculate(X,Y,&P,&Q);
printf(”X
+ Y = %d\n”, P);
printf(”X
* Y = %d\n”, Q);
}
2. Recursive
panggilan fungsi dalam fungsi untuk memanggil dirinya sendiri. sehingga terjadi looping terhadap dirinya sendiri. walaupun begitu, rekursif lebih ringkas dan membutuhkan lebih banyak memori.
rekursif biasanya digunakan pada fibonacci seperti:
urutan: 0, 1, 1, 2, 3, 5, 8, 13 ...
Hubungan antara angka tersebut didefinisikan secara rekursif sebagai berikut:
Fib (N) = N jika N = 0 atau 1
Fib (N) = Fib (N-2) + Fib (N-1) jika N> = 2
structure, union and memory allocation
sesuai dengan judul ada 3 bagian menjadi:
1.Structure
Structure
Struktur digunakan untuk
mengelompokkan elemen data yang berbeda (jenis variabel) dengan berbagai macam
tipe nama yang sama. Elemen-elemen data ini, yang dikenal sebagai anggota,
dapat memiliki tipe dan panjang yang berbeda. bersifat Heterogeneous dan dalam
bahas pemograman lain disebut record. dalam pengaksesan structure, dibutuhkan dot(.).
cth:
#include<stdio.h>
struct hsp
{
int no;
int tanggal;
int bulan;
int tahun;
char nama[20];
char tinggal[20];
}hsp[1010];
int main()
{
int a,b;
int call;
int rize;
int temp=0;
scanf("%d",&b);
for(a=1;a<=b;a++) //pengulangan struct
{
scanf("%d %d %d %d %s %s",&hsp[a].no,&hsp[a].tanggal,
&hsp[a].bulan,&hsp[a].tahun,&hsp[a].nama,&hsp[a].tinggal); //loop pada struct
}
scanf("%d",&call);
for(int p=1;p<=call;p++) //pengimputan data
{
scanf("%d",&rize);
for(int q=1;q<=p;q++) //manggil call untuk keluarnya data
{
if(rize==hsp[p].no) //dipanggil berdasar nomor
{
printf("%d. %s was born on %d/%d/%d and live at %s\n",hsp[q].no,hsp[q].nama,hsp[q].tanggal,hsp[q].bulan,hsp[q].tahun,hsp[q].tinggal);
temp=1;
}
}
if(temp!=1) //non data
{
printf("No data found!\n");
}
temp=0;
}
return 0;
}
typedef
Dalam
C++, typedef adalah suatu keyword yang digunakan untuk
mendeklarasikan tipe data dengan nama lain atau nama alias. Biasanya digunakan
dalam identifier panjang atau membentuk data type baru.
Contoh:
#include<stdio.h>
typedef struct data
{
int a;
char b[101]; //ip=identitas peserta
}ip;
int main()
{
ip data1={18,"Lili"};
ip data2={20,"jojo"};
ip data3={19 ,"bibi"};
printf("%d %s\n",data1.a,data1.b);
printf("%d %s\n",data2.a,data2.b);
printf("%d %s\n",data3.a,data3.b);
return 0;
}
Union
Union adalah seperti struktur di
mana semua anggota disimpan di alamat yang sama dan anggota dari union hanya
dapat diakses satu per satu. union memiliki keunggulan penting dalam penyimpanan memori dan akses serta dapat digunakan berkali-kali oleh program.
Enumeration(Enum)
Salah satu fungsi dari C++ untuk
menetapkan mana menjadi integral tetapi dalam mengubahnya, yang harus dicari
memiliki jumlah yang pasti dan tertentu. Sehingga program jadi lebih mudah
dibaca.
cth:
enum tingkatan_pendidikan
{
TK, SD, SMP, SMA, KULIAH
//0 1 2 3 4
};
int main()
{
enum tingkatan_pendidikan saya= KULIAH;
printf("pendidikan saya sekarang adalah %d",saya);
return 0;
}
void
Fungsi yang sering disebut
juga prosedur. Disebut void karena fungsi tersebut tidak mengembalikan suatu
nilai keluaran yang didapat dari hasil proses fungsi tersebut.
Ciri-ciri dari jenis fungsi Void adalah sebagai
berikut:
· -Tidak
adanya keyword return.
· -Tidak
adanya tipe data di dalam deklarasi fungsi.
· - Menggunakan
keyword void.
· - Tidak
dapat langsung ditampilkan hasilnya.
· - Tidak
memiliki nilai kembalian fungsi
Keyword
void dapat digunakan ketika suatu function
tidak mengandung suatu parameter apapun dan tidak menggunakan return value.
Memory allocation/ memori de-allocation
memori allocation untuk memperoleh beberapa memori(RAM) yang dikelola OS untuk program. sedangkan de-allocation, melepaskan memori kembali ke OS.
Alokasi Memori sebagai penyimpanan data:
1. statis
-dapat ditugaskan dengan nama variabel
- dialokasikan pada waktu kompilasi
- disimpan di memori stack lokal
- tetap tidak berubah selama menjalankan program
- tidak dialokasikan saat program berakhir
2. dinamis
- dapat diberi nama
- dialokasikan saat run-time
- disimpan di memori heap
-dapat di-alokasikan kapan saja.
File Processing
disini c++ dapat membaca suatu data yang disimpan dalam suatu program pada suatu file. pada file processing terbagi menjadi 3 bagian:
Ketika program C dijalankan, ada tiga (3) aliran standar yang diaktifkan:
1. Standard input stream(stdin)
Mengontrol aliran masukan dari keyboard
2. standard output stream(stdout)
Mengontrol aliran output ke monitor
3. Standard error stream(stderr)
Mengontrol pesan kesalahan
Setiap aliran yang terkait dengan file.
definisi file:
File adalah kumpulan catatan
Rekam adalah kumpulan bidang
Kolom adalah blok dari byte
Byte adalah kumpulan bit
Buffer area is part of the memory used as a temporary space before data moved to a file.
Buffer area adalah bagian dari memori yang digunakan sebagai ruang sementara sebelum data dipindahkan ke file.
Sintaksis:
FILE * fp;
Di mana fp adalah file pointer yang menunjuk ke awal area buffer.
•Opening
a File using fopen():
FILE *fopen (const char *filename,
const char *mode );
Nilai mode yang memungkinkan:
"R" membuka file untuk dibaca.
"W" membuat file yang akan ditulis.
"A" membuka File untuk menambahkan data.
"R +" membuka File untuk membaca / menulis.
"W +" membuat file untuk dibaca / ditulis.
"A +" membuka File untuk dibaca / ditambahkan
"Rb" membuka File (biner) untuk dibaca.
"WB" membuat file (biner) untuk operasi tulis.
int fclose
(FILE *stream); untuk menutup file
contoh file:
#include<stdio.h>
int arr[1000005];
int main()
{
FILE *fp;
unsigned long long files;
unsigned long long count=0,sum=0;
unsigned long long minimum=0,maximum=0,range=0;
double sumsum=0,mean=0;
minimum=0,maximum=0,range=0;
fp=fopen("testdata.in","r");
while(fscanf(fp,"%llu",&files)!=EOF)
{
arr[count]=files;
sum=sum+files;
if(count==0)
{
minimum=files;
maximum=files;
}
if(minimum>files)
{
minimum=files;
}
if(maximum<files)
{
maximum=files;
}
count++;
}
sumsum=sum;
mean=sumsum/count;
range=maximum-minimum;
printf("Count : %llu\n", count);
printf("Sum : %llu\n", sum);
printf("Mean : %.2lf\n",mean);
printf("Min : %llu\n", minimum);
printf("Max : %llu\n", maximum);
printf("Range : %llu\n", range);
fclose(fp);
return 0;
}
bubble select and insertion merupakan bagian dari sorting.
1. bubble
membandingkan 2 nilai yang berdekatan dan akan bertukar posisi tergantung dengan kondisi
void Bubble(int *DataArr, int n)
{
int i, j;
for(i=1;
i<n; i++)
for(j=n-1;
j>=i; j--)
if(DataArr[j-1]
> DataArr[j])
Swap(&DataArr[j-1],&DataArr[j]);
}
2.selection
membandingkan 2 nilai tetapi hanya memilih salah satu nilai(sementara) tetapi akan terus membandingkan hingga mendapatkan nilai yang sesuai dengan kondisinya. ketika kondisi tercapat, maka nilai yang sesuai dengan kondisi akan bergeser.
for(i=0;
i<N-1;
i++){ /* N=number of data */
Set idx_smallest
equal to i
for(j=i+1;
j<N; j++){
If array[ j ] < array [ idx_smallest ]
then idx_smallest = j
}
Swap array[ i ]
with array[ idx_smallest ]
}
3. insertion
membandingkan 2 buah nilai, ketika 2 nilai sesuai dengan kondisi, maka salah satu nilai akan ditampung ke tempat lain dan tempat salah satu nilai menjadi 0. kemudian nilai satunya akan bergeser ke tempat nilai yang telah ditampung. setelah bergeser, nilai yang tertampung akan mengisi tempat itu.
for(i=1;
i<n; i++) {
x =
A[i], insert x to its suitable place between A[0] and A[i-1].
}
4.quick sort
void
QuickSort(int left, int right)
{
if(left < right){
//arrange elements R[left],...,R[right] that
//producing new sequence:
R[left],...,R[J-1] < R[J] and
R[J+1],...,R[right] > R[J].
QuickSort(left, J-1);
QuickSort(J+1, right);
}
}
nilai-nilai akan bertukar tegantung dengan kondisi jika sesuai akan bertukar tetapi jika tidak sesuai, nilai tersebut akan mencari nilai lainnya lalu bertukar posisi dengan cepat
5.merge sort
Merge Sort adalah algoritma pengurutan berdasarkan algoritma divide-and-conquer
Divide-and-conquer adalah paradigma desain algoritma umum
Divide: membagi input data dalam dua subset yang disatukan
Recur: pecahkan masalah sub yang terkait dengan subhimpunan
Conquer: menggabungkan solusi untuk setiap bagian menjadi solusi
2.SEARCHING
searching adalah tindakan untuk mengambil informasi berdasarkan kunci tertentu dari beberapa informasi yang disimpan. informasi penting dinamakan key dan key harus unik dan key nya tidak boleh sama dengan key lainnya.
cth:
Data siswa terdiri dari nama, nim, jenis kelamin, alamat, tempat dan tanggal lahir
nim digunakan sebagai key dari data, karena itu unik.
1. binary search
Pencarian linear membandingkan setiap elemen dari array dengan kunci pencarian.
Karena larik tidak dalam urutan tertentu, kemungkinan besar nilainya akan ditemukan di elemen pertama seperti yang terakhir
Oleh karena itu, rata-rata, program harus membandingkan kunci pencarian dengan setengah elemen dari array.
a.Linier Search
1. n :
total record of array x.
2. For each x[i],
0 £ i £ n-1,
check
whether
x[i] = key.
3. If x[i]
= key,
then the searched data is found in index=i.
Finished.
4. If x[i]
¹
key,
then continue searching until the last data which is i
= n-1.
5. If i=
n-1 and x[i] ¹
key, it
means the data is not exist in the list, and set
index = -1.
Finished.
b.Binary Search
Linear search compares each element of the array with the search key.
Since the array is not in any particular order, it’s just as likely that the value will be found in the first element as in the last
On average, therefore, the program will have to compare the search key with half the elements of the array
2.binary search
Metode pencarian linier berfungsi baik untuk array kecil atau tidak disortir. Namun, untuk pencarian linear array besar tidak efisien
Jika susunan diurutkan, teknik pencarian binari berkecepatan tinggi dapat digunakan
1. n : total record of array x.
2. left=0, right= n-1.
3. mid =(int) (left + right)/2.
4. If x[mid]=key then index = mid. Finished.
5. If x[mid]<key then left = mid+1.
6. If x[mid]>key then right = mid-1.
7. If left £ right and x[mid] ¹ key, then repeat point 3.
8. If x[mid] ¹ key then index = -1. Finished.
3. Interpolan Search
Teknik pencarian interpolasi dilakukan pada data yang diurutkan
Proses pencarian ini hampir mirip dengan teknik pencarian biner
Teknik pencarian dilakukan dengan perkiraan lokasi data.
Contoh:
Jika kita ingin mencari nama di buku telepon, misalnya yang diawali dengan huruf T, maka kita tidak akan mencari dari awal buku, tetapi kita membukanya di 2/3 atau ¾ dari buku.
Komentar
Posting Komentar