Sunday, November 29, 2015

Strlen

Strlen adalah salah satu perintah dalam library string.h yang berfungsi untuk menghitung panjang suatu string.

strlen(string1);
string1: string yang panjangnya akan dihitung
Return value: panjang karakter dalam bentuk integer (int)

Hati-hati!
Apabila panjang stringnya 10, maka  proses penghitungannya akan dilakukan 10 kali.
Apabila panjang stringnya 100 ribu, maka proses penghitungannya akan dilakukan 100 ribu kali.
Jadi, perintah ini kurang efektif untuk beberapa case terutama di looping (contoh case di bawah).

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[50];
    scanf("%[^\n]s", str1);
   
    printf("%d", strlen(str1));
}

Contoh input:
pohon saya

Contoh output:
10

Contoh potongan kode yang tidak efektif:
int i;
for(i = 0; i < strlen(string1); i++)
{...}

Kode tersebut bisa diubah menjadi efektif:
int i, panjang = strlen(string1);
for(i = 0; i < panjang ; i++)
{...}

Strtok

Strtok adalah salah satu perintah dalam library string.h yang berfungsi untuk memisahkan string dari karakter (huruf) tertentu.

strtok(string1, string2);
string1: berisi string asal yang akan dipisah.
string2: berisi karakter-karakter dalam bentuk string yang digunakan sebagai titik pemisahan.
Return value: string1 yang sudah dipisah dari string2 (disimpan dalam variabel pointer char/char *pch)

Variabel 'string1' diisi 'NULL' untuk pemanggilan selanjutnya.

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
void main(){
    char a[50], b[50];
    char *pch;
  
    scanf("%[^\n]s", a); getchar();
    scanf("%[^\n]s", b);
  
    pch = strtok(a, b);
    while(pch != NULL)
    {
        printf("%s\n", pch);
        pch = strtok(NULL, b);
    }
}

Contoh test case:
.saya .!mahasiswa! angkatan.!.2014
. !

Contoh output:
saya
mahasiswa
angkatan
2014

Bubble Sort

Bubble Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Algoritmanya paling sederhana
Kekurangan: Proses pengurutannya lambat

Kompleksitas: O(n^2)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Bubble_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   // Input jumlah test case
    int N; scanf("%d", &N);

    // Input Data
    int arr[N], i;
    for(i = 0;i < N;i++)
        scanf("%d", &arr[i]);
   
    // Bubble Sort
    int j, tmp, fl;

    for(i = 0;i < N;i++)
    {
        fl = 1;
        for(j = N-1;j >= i;j--)
            if(arr[j - 1] > arr[j])
            {
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
                fl = 0;
            }
       
        if(fl == 1) break;
    }

    // Output
    printf("%d", arr[0]);
    for(i = 1;i < N;i++)
        printf(" %d", arr[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7

Selection Sort

Selection Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Algoritmanya cukup sederhana dan mudah diimplementasikan
Kekurangan: Tidak efektif jika mengurutkan data yang banyak

Kompleksitas: O(n^2)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Selection_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   int N, i;

    // Input jumlah test case
    scanf("%d", &N);
  
    // Input Data
    int arr[N];
    for(i = 0;i < N;i++)
        scanf("%d", &arr[i]);
       
    //Selection Sort
    int j, akhir = N-1, indeks, tmp;
   
    for(i = 0;i < akhir;i++)
    {
        indeks = i;
        for(j = i+1;j < N;j++)
            if(arr[indeks] > arr[j])
                indeks = j;
       
        if(indeks != i) // Switch data
        {
            tmp = arr[i];
            arr[i] = arr[indeks];
            arr[indeks] = tmp;
        }
    }

    // Output
    printf("%d", arr[0]);
    for(i = 1;i < N;i++)   
        printf(" %d", arr[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7

Insertion Sort

Insertion Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Cepat pada data yang sebagian besar sudah terurut, codenya cukup singkat, dan stabil
Kekurangan: Tidak efektif (lambat) jika datanya banyak dan terurut secara terbalik (worst case)

Kompleksitas
Worst case/Average: O(n^2)
Best case (data sudah terurut): O(n)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Insertion_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   int N, i;

    // Input jumlah test case
    scanf("%d", &N);
   
    // Input Data
    int ar[N];
    for(i = 0;i < N;i++)
        scanf("%d", &ar[i]);
   
    //Insertion Sort
    int tmp, j;

    for(i = 1;i < N;i++)
    {
        tmp = ar[i];
        j = i - 1;
       
        while((ar[j] > tmp) && (j > -1))
        {
            ar[j + 1] = ar[j];
            j--;
        }
       
        ar[j + 1] = tmp;
    }
   
    // Output
    printf("%d", ar[0]);
    for(i = 1;i < N;i++)
        printf(" %d", ar[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7