Selasa, 25 November 2014

Penerapan Konsep Tabel pada Algoritma

Nama               : Haryo Fajar Bhagaskoro
Kelas               : 1IA17
NPM                : 54414833
Mata Kuliah     : Algoritma dan Pemrograman 1A
Dosen : Kunto Bayu A, ST.
1. Argumen dan Fungsi


Tabel merupakan data pembantu dalam pengolahan data. Contohnya dalam suatu lembar dokumen terdapat data mahasiswa sebagai berikut :



Dari data pegawai tersebut tidak dapat diketahui nama setiap mahasiswa. Untuk itu dapat dibuat suatu tabel yang berisi khusus untuk nama mahasiswa seperti dibawah ini :


Item NIP merupakan item yang dipakai sebagai acuan untuk mencari data nama pegawai di dalam tabel. Item ini berfungsi sebagai kontrol field yang sering disebut ARGUMEN. Sedang item NAMA merupakan FUNCTION dari tabel tersebut.



2.  Penggunaan Storage untuk Penyimpanan Tabel
 Data di dalam media penyimpanan seperti disk, kartu, dokumen dll yang berfungsi sebagai tabel disebut Eksternal Tabel.
 Dalam proses pengolahan data, eksternal tabel ini sebaiknya dipindahkan ke memori agar proses menjadi cepat.
Di dalam memori eksternal tabel menempati lokasi yang disebut storage. Di storage ini terbentuk suatu tabel yang disebut sebagai Internal Tabel. Selanjutnya proses pengolahan data menggunakan internal tabel.

Perhatikan flowchart diatas. Terlihat bahwa setiap data yang dibaca dari external tabel disimpan didalam NPMTAB(I) dan NMTAB(I). Variabel ini merupakan variabel berindeks atau sering disebut sebagai variabel array.


Variabel array merupakan satu variabel dengan beberapa tempat penyimpanan.
Gambar dibawah ini memperlihatkan ilustrasi variabel array NPMTAB.


Penyimpanan ke dalam variabel array NPMTAB dilakukan berdasarkan nilai indeksnya. Pada flowchart di atas nilai indeks ditentukan melalui variabel I. Pada saat data NPM pertama diinput, nilai I = 1. Dengan demikian NPM yang pertama diinput disimpan didalam variabel NPMTAB(1), demikian seterusnya. Sehingga terbentuk variabel NPMTAB dan NMTAB dengan isi seperti yang terlihat dibawah ini.


3. Proses Pencarian (Searching)
Proses pencarian (searching) didalam internal tabel dilakukan dengan berpatokan pada nilai indeksnya. Misalnya untuk mencari nama pegawai dengan NPM = 163483 maka dapat digambarkan melalui flowchart berikut :


Flowchart di atas disusun dengan asumsi internal tabel telah terbentuk. Proses pencarian nama mahasiswa dapat diurutkan sebagai berikut :

a.       Pada awal proses, variabel NO diisi nilai sesuai dengan NPM yang akan dicari. Sedangkan variabel I digunakan sebagai indeks untuk menentukan posisi variabel array internal tabel.
b.      Nilai I ditambah 1.
c.       Periksa isi variabel NIPTAB dengan lokasi sesuai indeks pada variabel I. Jika isinya sama dengan isi variabel NO, lakukan :
·   cetak isi variabel NMTAB dengan lokasi sesuai indeks pada variabel I
·   proses selesai. Sebaliknya, jika isinya tidak sama lakukan langkah d
d.      Kembali ke langkah b


Contoh Penerapan Konsep Tabel :

Dalam suatu lembar dokumen terdapat data Gaji Pegawai dan Tabel Nama Pegawai

Data Gaji Pegawai

Tabel Nama Pegawai

Jika Gaji dihitung berdasarkan GAJI POKOK + TUNJANGAN, maka buat flowchart untuk mencetak laporan seperti berikut :


Flowchart yang terbentuk :

4. Pengurutan dengan Eksternal Tabel

a.       Pembentukan File Indeks 
·         Proses pengurutan bilangan dilakukan di internal tabel. Semua bilangan yang akan diurutkan disimpan dahulu ke suatu penyimpanan di dalam memori yaitu variabel array.
·         Di memori, proses pengurutan dapat dilakukan dengan lebih cepat. Namun jika datanya banyak, maka proses ini akan membutuhkan ukuran memori yang besar. 8Untuk menghindarinya, proses pengurutan dilakukan di dalam eksternal tabel.
·         Eksternal tabel dibentuk dengan cara membuat file baru. File ini desebut sebagai File Indeks. Isi file indeks adalah field yang berfungsi sebagai field kunci (key field) dari record data yang akan diurutkan. Key Field merupakan field yang dipakai sebagai dasar pengurutan. Misal data yang harus diurutkan berdasarkan NIP, maka field kuncinya adalah field yang berisi NIP.

Secara garis besar, proses pengurutan dengan eksternal tabel terdiri dari langkah-langkah
·         Bentuk file indeks yang hanya berisi field kunci.
·         Lakukan pengurutan pada file indeks. Pengurutan dapat dilakukan dengan metode bubble sort atau straight selection.
·         Pindahkan record dari file lama ke file baru dengan posisi record sesuai pada file indeks.

b.      Proses Pembentukan File Indeks


Jika data di file PEG.DTA ingin diurutkan berdasarkan NIP, maka harus dibentuk file indeks yang hanya berisi field NIP. Proses pembentukan file indeks ini dapat digambarkan melalui flowchart :


Berdasarkan flowchart diatas, terbentuk file indeks yaitu INDEKS.DTA.



Sumber : http://royimanuels.blogspot.com/2014/11/penerapan-konsep-tabel-pada-algoritma.html

Teknik Switching pada Algoritma & Pemrograman

      Nama               : Haryo Fajar Bhagaskoro
Kelas               : 1IA17
NPM                : 54414833
Mata Kuliah     : Algoritma dan Pemrograman 1A
Dosen              : Kunto Bayu A, ST.

Definisi :
Tehnik Switching merupakan cara memperpendek jalur proses yang memakai suatu indikator untuk mengantisipasi proses yang akan dilakukan selanjutnya. Indikator ini dimisalkan seperti switch pada tombol lampu yang dapat mengatur dua kondisi yaitu nyala dan padam.

Dalam flowchart, switch merupakan variabel yang (biasanya) diisi dengan dua kondisi yaitu 0 dan 1. Melalui isi variabel tersebut dapat diketahui kondisi proses yang telah dilakukan. Sehingga dapat dilakukan pengalihan proses tanpa melalui proses sebelumnya atau mempersingkat alur proses.


Contoh Soal :
Suatu perusahaan akan membuat laporan gaji pegawainya berdasarkan golongannya. Data yang dibaca terdiri dari nomor pegawai, nama pegawai, golongan dan gaji bersih. Data yang dibaca sudah urut per golongan yang terdiri dari : golongan 1, 2, 3, 4. Jika golongan berubah maka cetak TOTAL GAJI per golongan dan ganti halaman baru serta NOMOR dimulai dari 1.
Pada akhir laporan cetak TOTAL SELURUH GAJI yaitu jumlah total gaji seluruh golongan.

Flowchart :

Database :
CREATE TABLE `gaji` (
`nopeg` varchar(10) NOT NULL,
`nama` varchar(10) NOT NULL,
`golongan` int(1) NOT NULL,
`gaji` decimal(12,0) NOT NULL,
PRIMARY KEY (`nopeg`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Script : 
Flowchart diatas saya terjemahkan ke script. Untuk mudahnya saya menggunakan bahasa PHP + database MySQL. Script saya tulis dengan aplikasi gPHPEditKompozer dibantu dengan tool Adee HTML to PHP Converter dan Adee HTML Parser :-)


<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'server';
$dbname = 'latihan';
$sw = 0;
$tot_gaji_gol=0;
$tot_gaji_all=0;
$no=0;
$gol_current=0;
$flag_awal=0;

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error Koneksi');
mysql_select_db($dbname);

$perintah = "select * from gaji order by golongan asc";
$hasil=mysql_query($perintah);

while ($row=mysql_fetch_array($hasil)){
$nopeg=$row["nopeg"];
$nama=$row["nama"];
$golongan=$row["golongan"];
$gaji=$row["gaji"];
$no=$no+1;

if($golongan <> $gol_current) {
$gol_current = $golongan;
$sw=0;
}

//cek switch, jika 0 cetak judul & header tabel, ubah switch jadi 1
if($sw==0){
//tutup tabel
if ($flag_awal > 0) {
echo "</tbody>";
echo "</table>";
echo "Total Gaji : " . $tot_gaji_gol;
echo "<p></p>";
}
//cetak judul
echo "<strong>Tabel Gaji PT.ABC</strong>";
echo "<table style='text-align: left; width: 100%;' border='1' cellpadding='2' cellspacing='2'>";
echo "<tbody>";
echo "<tr>";
echo "<td style='vertical-align: top; background-color: rgb(204, 204, 255);'>NO<br></td>";
echo "<td style='vertical-align: top; background-color: rgb(204, 204, 255);'>NOPEG<br></td>";
echo "<td style='vertical-align: top; background-color: rgb(204, 204, 255);'>NAMA<br></td>";
echo "<td style='vertical-align: top; background-color: rgb(204, 204, 255);'>GOLONGAN<br></td>";
echo "<td style='vertical-align: top; background-color: rgb(204, 204, 255);'>GAJI<br></td>";
echo "</tr>";
$sw=1;
$flag_awal=$flag_awal+1;
$gol_current=$golongan;
$tot_gaji_gol = 0;
}

echo "<tr>";
echo "<td style='vertical-align: top;'>$no<br></td>";
echo "<td style='vertical-align: top;'>$nopeg<br></td>";
echo "<td style='vertical-align: top;'>$nama<br></td>";
echo "<td style='vertical-align: top;'>$golongan<br></td>";
echo "<td style='vertical-align: top;'>$gaji<br></td>";
echo "</tr>";
$tot_gaji_gol=$tot_gaji_gol + $gaji;
$tot_gaji_all =$tot_gaji_all + $gaji;

}
// tutup tabel
echo "</tbody>";
echo "</table>";
echo "Total Gaji : " . $tot_gaji_gol;
echo "<p></p>";
echo "Total Seluruh Gaji : " . $tot_gaji_all;

?>
Result : 
Dari penjelasan diatas, dapat kita lihat implementasi dan korelasi nyata dari soal cerita, flowchart, desain database, sampai dengan scripting. Semoga bisa mengurangi kebingungan teman-teman, karena masih banyak yang memahami teori (algoritma, etc), database, dan scripting secara parsial.

Teknik switching sebenarnya sangat sederhana, artinya kita harus bisa menentukan kapan script akan mencetak header tabel.

Berikut hasilnya :
Sumber : http://adiriswan.blogspot.com/2010/12/algoritma-pemrograman-teknik-switching.html


Senin, 24 November 2014

Penyalahgunaan Narkoba

Narkoba adalah singkatan dari narkotika dan obat-obatan berbahaya. Narkotika adalah obat untuk menenangkan syaraf, menghilangkan rasa sakit, dan meningkatkan rangsangan, contohnya morfin, heroin, dan kokain. Zat-zat yang tergolong narkoba umumnya dipakai dalam dunia medis. Siapa pun yang menggunakannya untuk tujuan di luar tujuan pengobatan (medis) tergolong tindakan yang salah. Penyalahgunaan narkoba menjadi masalah sosial yang sangat serius. Pemakai narkoba akan kecanduan. Zat-zat itu perlahan-lahan merusak tubuh pemakainya. Banyaknya peredaran narkoba dan penyalahgunaan nakoba sangat meresahkan. Negara kita memiliki hukum yang sangat keras yang mengatur peredaran narkoba. Siapa yang berani mengedarkan narkoba jenis apapun akan dihukum sangat berat. Mereka yang menggunakannya pun bisa dihukum. Demikian pula penggunaan alkohol. Agama telah melarang umatnya untuk mengkonsumsi alkohol. Negara kita juga memiliki undang-undang yang melarang penjualan alkohol di sembarang tempat. Meskipun demikian, masih ada banyak orang yang menyalahgunakan alkohol. Kamu tahu apa yang terjadi kalau orang terlalu banyak minum alkohol? Orang itu akan mabuk. Dalam keadaan mabuk, orang bisa melakukan apa saja, termasuk kejahatan. Keadaan ini tentu akan mengganggu ketertiban masyarakat.

LATAR BELAKANG PENGGUNAAN NARKOBA

Pada awalnya orang-orang yang mencoba mengkonsumsi narkoba kebanyakan ketika masih sekolah SMP, di SMP mereka mulai mencoba minum-minuman keras yang ditawari oleh teman-temannya yang ada di SMA. Ketika mereka sudah masuk SMA mereka mulai mencoba mengkonsumsi pil lexotan yang dosisnya ringan, kemudian mereka mencoba obat-obatan yang dosisnya tinggi. Orang-orang mengkonsumsi narkoba itu bertujuan untuk menenangkan diri dari masalah yang dihadapi olehnya. Misalnya anak yang selalu dimarahi oleh orang tuanya dan kurang perhatian (kasih sayang) dari kedua orang tuanya pasti merasa kesal dan marah maka, untuk menghilangkan rasa kesal dan marahnya mereka minum-minuman keras bahkan ada yang langsung memakai narkoba. Apabila ditambah dengan pergaulan yang bebas, yaitu pergaulan yang tanpa aturan, sekehendak sendiri dan tidak mau diatur, sangat dominan dalam proses penyalahgunaan narkoba ini.


JENIS – JENIS NARKOBA YANG BIASA DIKONSUMSI

Para pengedar dan pemakaian narkoba di Indonesia cenderung biasa menggunakan ganja dan pil lexotan. Berhubung harganya lebih murah dari narkoba lain, narkoba jenis ini mempunyai reaksi dan proses penggunaannya lebih cepat dan lebih praktis. Di luar negeri biasanya narkoba yang dikonsumsi jenis heroin, morfin, kokain dan doping, kenapa di Indonesia yang biasa digunakan hanya ganda dan lexotan karena ganja dan lexotan mudah diproduksi dan dapat sedangkan narkoba jenis heroin, kokain, morfin dan sebagainya harus impor dan banyak sekali resikonya.

DAMPAK YANG DITIMBULKAN OLEH NARKOBA

Narkoba bisa memabukkan karena seluruh saraf-saraf dalam tubuh tidak berfungsi layaknya orang normal sehingga orang yang mengkonsumsi narkoba seperti orang gila. Apabila terlalu sering menggunakan narkoba maka kita akan ketagihan karena mengakibatkan ketergantungan terhadap obat-obatan itu. Cara-cara apapun dilakukan oleh pemakai narkoba supaya bisa membeli narkoba dengan  cara merampok, mencuri, dan sebagainya.

UPAYA PENAGGULANGAN
       1.Preventif
Ø  Pendidikan Agama sejak dini
Ø   Pembinaan kehidupan rumah tangga yang harmonis dengan penuh perhatian dan kasih sayang.
Ø   Menjalin komunikasi yang konstruktif antara orang tua dan anak
Ø  Orang tua memberikan teladan yang baik kepada anak-anak.
Ø  Anak-anak diberikan pengetahuan sedini mungkin tentang narkoba, jenis, dan dampak negatifnya


        2.Tindakkan HuKum
Dukungan semua pihak dalam pemberlakuan Undang-Undang dan peraturan disertai tindakkan nyata demi keselamatan generasi muda penerus dan pewaris bangsa. Sayangnya KUHP belum mengatur tentang penyalah gunaan narkoba, kecuali UU No :5/1997 tentang Psikotropika dan UU no : 22/1997 tentang Narkotika. Tapi kenapa hingga saat ini penyalah gunaan narkoba semakin meraja lela ? Mungkin kedua Undang-Undang tersebut perlu di tinjau kembali relevansinya atau menerbitkan kembali Undang-Undang yang baru yang mengatur tentang penyalahgunaan narkoba ini.

        3. Rehabilitasi
Didirikan pusat-pusat rehabilitasi berupa rumah sakit atau ruang rumah sakit secara khusus untuk mereka yang telah menderita ketergantungan. Sehubungan dengan hal itu, ada beberapa alternative penanggulangan yang dapat kami tawarkan :
v  . Mengingat penyalah gunaan narkoba adalah masalah global, maka penanggulangannya harus dilakukan melalui kerja sama international.
v  . Penanggulangan secara nasional, yang teramat penting adalah pelaksanaan Hukum yang tidak pandang bulu, tidak pilih kasih. Kemudian menanggulangi masalah narkoba harus dilakukan secara terintegrasi antara aparat keamanan ( Polisi, TNI AD, AL, AU ) hakim, jaksa, imigrasi, diknas, semua dinas/instansi mulai dari pusat hingga ke daerah-daerah. Adanya ide tes urine dikalangan Pemda Kalteng adalah suatu ide yang bagus dan perlu segera dilaksanakan. Barang siapa terindikasi mengkomsumsi narkoba harus ditindak sesuai peraturan DIsiplin Pegawai Negri Sipil dan peraturan yang mengatur tentang pemberhentian Pegawai Negri Sipil seperti tertuang dalam buku pembinaan Pegawai Negri Sipil. Kemudian dikalangan Dinas Pendidikan Nasional juga harus berani melakukan test urine kepada para siswa SLTP-SLTA, dan barang siapa terindikasi positif narkoba agar dikeluarkan dari sekolah dan disalurkan ke pusat rehabilitasi. Di sekolah- sekolah agar dilakukan razia tanpa pemberitahuan sebelumnya terhadap para siswa yang dapat dilakukan oleh guru-guru setiap minggu. Demikian juga dikalangan mahasiswa di perguruan tinggi.
v  Khusus untuk penanggulangan narkoba di sekolah agar kerja sama yang baik antara orang tua dan guru diaktifkan. Artinya guru bertugas mengawasi para siswa selama jam belajar di sekolah dan orang tua bertugas mengawasi anak-anak mereka di rumah dan di luar rumah. Temuan para guru dan orang tua agar dikomunikasikan dengan baik dan dipecahkan bersama, dan dicari upaya preventif penanggulangan narkoba ini dikalangan siswa SLTP dan SLTA.
v  Polisi dan aparat terkait agar secara rutin melakukan razia mendadak terhadap berbagai diskotik, karaoke dan tempat-tempat lain yang mencurigakan sebagai tempat transaksi narkoba. Demikian juga merazia para penumpang pesawat, kapal laut dan kendaraan darat yang masuk, baik secara rutin maupun secara insidental.
v  Pihak Departemen Kesehatan bekerjasama dengan POLRI untuk menerbitkan sebuah booklet yang berisikan tentang berbagai hal yang terkait dengan narkoba. Misalnya apakah narkoba itu, apa saja yang digolongkan kedalam narkoba, bahayanya, kenapa orang mengkomsumsi narkoba, tanda- tanda yang harus diketahui pada orang- orang pemakai narkoba cara melakukan upaya preventif terhadap narkoba. Disamping itu melakukan penyuluhan ke sekolah-sekolah, perguruan tinggi, dan berbagai instansi tentang bahaya dan dampak negative dari narkoba. Mantan pemakai narkoba yang sudah sadar perlu dilibatkan dalam kegiatan penyuluhan seperti itu agar masyarakat langsung tahu latar belakang dan akibat mengkomsumsi narkoba.
v  Kerja sama dengan tokoh-tokoh agama perlu dieffektifkan kembali untuk membina iman dan rohani para umatnya agar dalam setiap kotbah para tokoh agama selalu mengingatkan tentang bahaya narkoba.
v  Seperti di Australia, misalnya pemerintah sudah memiliki komitmen untuk memerangi narkoba. Karena sasaran narkoba adalah anak-anak usia 12-20 tahun, maka solusi yang ditawarkan adalah komunikasi yang harmonis dan terbuka antara orang tua dan anak-anak mereka. Booklet tentang narkoba tersebut dibagi-bagikan secara gratis kepada semua orang dan dikirin lewat pos kealamat-alamat rumah, aparteman, hotel, sekolah-sekolah dan lain-lain. Sehubungan dengan kasus ini, maka keluarga adalah kunci utama yang sangat menentukan terlibat atau tidaknya anak-anak pada narkoba. Oleh sebab itu komunikasi antara orang tua dan anak-anak harus diefektifkan dan dibudayakan.

SANKSI YANG DI BERIKAN KEPADA PEMAKAI DAN PENGEDAR NARKOBA

Narkoba adalah obat-obatan yang biasa digunakan di kedokteran, tetapi apabila obat-obatan tersebut disalahgunakan maka perbuatan itu termasuk melanggar hukum sehingga harus diberi sanksi. Adapun sanksi-sanksi yang harus diberikan sebagai berikut:
Untuk pengedar sanksinya dipenjara selama 10 tahun dan didenda sebanyak 500 juta rupiah. Tetapi apabila pengedar itu berstatus sebagai bandar atau bosnya maka dia dipenjara selama 20 tahun sampai dengan seumur hidup bahkan dihukum mati dan didenda 1 milyar rupiah.
 Untuk penyimpang atau pembuat narkoba sanksinya dipenjara selama 7 tahun dan didenda sebanyak 10 juta rupiah. Sanksi – sanksi tersebut  terdapat di dalam undang-undang KUHP tentang narkoba :
1)      UU No. 22 tahun 1997 pasal 79 ayat 1 bagi pengedar kelas teri (narkotika)
2)      UU No. 5 tahun 1997 pasal 79 ayat 1 bagi pengedar kelas kakap (psikotropika)
 


KESIMPULAN

Pada awalnya orang-orang khususnya remaja mengkonsumsi narkoba mulai dari SMP, Bahkan sekarang narkoba juga sudah masuk ke SD. Modusnya sama mula-mula diberi, lama-kelamaan menjadi ketergantungan. Harganya juga mula-mula gratis, dan setelah lama harganya makin mahal, Karena sudah ketergantungan berapapun harganya akan dibeli. Jika pembelinya orang kaya masih bisa dibeli, tetapi kalau orang miskin mau pakai apa mereka membelinya. Factor pemicu seseorang menjadi pecandu narkoba antara lain Karena keluarganya berantakan. Contohnya orang tua si pecandu bercerai. Dengan perceraian itu si anak jadi kurang Perhatian. Factor pemicu yang lain pemahaman agama yang minim pengalaman yang kurang baik. Banyak sekali jenis narkoba sekarang ini contohnya pil lexotan, Extaci, ganja, heroin, morphine dan lain-lain. Cara mengkonsumsinya juga bervariasi sesuai jenis narkoba yang dikonsumsi. Sanksi bagi para si pecandu dan pengedar, sebenarnya sudah cukup memberatkan, apalagi sekarang sudah banyak yang dihukum mati akibat kasus narkoba. Sebenarnya pengedaran narkoba dapat dicegah dengan pengawasan yang intensif baik dari polisi ataupun masyarakat terutama bagi para orang tua harus bisa mendidik anaknya supaya tidak terjerumus ke lembah hitam. Bisa dengan pendekatan agama ataupun yang lainnya. Kalau tidak diawasi, akankah semua remaja di Indonesia akan menjadi pecandu narkoba? Kita berharap tidak demikian.

Rabu, 12 November 2014

Quicksort

Nama: Haryo Fajar Bhagaskoro
NPM : 54414833
DOSEN : Kunto Bayu A, ST
MATKUL : Algoritma & Pemrograman 1A


Quicksort merupakan Algoritma Sorting yang dikembangkan oleh Tony Hoare yang, secara kasus rata-rata, membuat pengurutan O(n log n) untuk mengurutkan n item. Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terbentuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya dari pada algoritma O(n log n) yang lainnya. Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).
Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak merupakan algoritma sorting yang stabil.
contoh quicksort
Quicksort merupakan tindakan dalam membuat daftar angka. Garis horisontal merupakan nilai sumbu.

ALGORITMA
Quicksort merupakan Algoritma Pembagi. Pertama sekali quicksort membagi list yang besar menjadi dua buah sub list yang lebih kecil: element kecil dan element besar. Quicksort kemudian dapat menyortir sub list itu secara rekursif.
Langkah-Langkah pengerjaannya ialah:
  1. Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar.
  2. Urutkan kembali sebuah list sehingga elemen dengan nilai yang kecil dari pivot berada sebelum pivot, sedangkan seluruh element yang memiliki nilai yang lebih besar dari pivot berada setelahnya (nilai yang sama dapat berada pada pivot setelahnya). Setelah pemisahan, pivot berada pada posisi akhirnya. Operasi ini disebut Partition.
  3. Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari elemen yang lebih besar.
Kasus dasar dari rekusrif ialah list dari besaran nol atau satu, yang tidak perlu untuk di sorting.

Versi Sederhana
Dalam Pseudocode sederhana, Algoritmanya dapat dinyatakan sebagai berikut:
  function quicksort('array')
      if length('array')1
          return 'array'  // an array of zero or one elements is already sorted
      select and remove a pivot value 'pivot' from 'array'
      create empty lists 'less' and 'greater'
      for each 'x' in 'array'
          if 'x''pivot' then append 'x' to 'less'
          else append 'x' to 'greater'
      return concatenate(quicksort('less'), 'pivot', quicksort('greater')) // two recursive calls

Contoh keseluruhan dari quicksort pada kumpulan acak dari angka. Element yang gelap merupakan pivot. Pivot selalu dipilih sebagai element terakhir pada partisi. Bagaimanapun, selalu memilih elemen terakhir pada partisi sebagai pivot sehingga hasil pada kasus terburuk (O(n^2)) pada daftar yang telah diurutkan, atau daftar yang serupa. Karena elemen yang sama memotong hingga pada akhir dari prosedur soring pada jumlah yang besar, versi dari algoritma quicksort yang memilih pivot sebagai elemen tengah berjalan lebih cepat dari pada algortima yang dijelaskan pada diagram ini pada sejumlah besar angka.
Perlu diperhatikan bahwa kita hanya memeriksa elemen dengan membandingkan mereka pada elemen yang lain. Prosedur ini disebuk Sorting Pembandingan. Jenis ini juga merupakan jenis sorting yang stabil (asumsikan bahwa untuk setiap method menerima elemen pada urutan aslinya dan pivot yang dipilih merupakan elemen terakhir dari nilai yang sama).
Kebenaran dari algoritma partisi didasari pada dua argumen berikut:
  • Pada setiap iterasi, seluruh elemen diproses selama ini berada pada posisi yang diinginkan: sebelum pivot lebih kurang dari nilai pivot, setelah pivot lebih besar dari nilai pivot (Invarian Loop).
Kebenaran dari keseluruhan algortima dapat dibuktikan dengan penyederhanaan fakta: untuk elemen nol atau satu, algoritma tidak akan mengubah data; untuk jumlah data yang lebih besar, algoritma akan menghasilkan dua bagian, elemen yang kurang dari pivot dan elemen yang lebih besar dari nya, data ini sendiri akan diurutkan secara hipotesa rekursif.

Contoh dari penerapan Quicksort.

Partisi ditepat bekerja pada daftar yang kecil. Elemen kotak merupakan element pivot, elemen berwarna biru merupakan elemen yang bernilai kecil atau sama, dan elemen yang berwarna merah lebih besar.
 Versi In-Place
Kerugian dari versi sederhana diatas membutuhkan ruang simpan O(n) yang lebih besar, yang sama buruknya seperti merge sort. Memory tambahan yang dibutuhkan dapat juga secara radikal berpengaruh pada kecepatan dan performa cache pada implementasi praktiknya. Terdapat juga versi yang lebih rumit yang menggunakan algoritma partisi in-place dan dapat mencapai urutan lengkap menggunakan ruang O(logn) (tidak dihitung input) pada rata-rata (untuk sekali pemanggilan tumpukan). Kita mulai dengan fungsi partisi:
   // left is the index of the leftmost element of the array
   // right is the index of the rightmost element of the array (inclusive)
   //   number of elements in subarray = right-left+1
   function partition(array, 'left', 'right', 'pivotIndex')
      'pivotValue' := array['pivotIndex']
      swap array['pivotIndex'] and array['right']  // Move pivot to end
      'storeIndex' := 'left'
      for 'i' from 'left' to 'right' - 1  // left ≤ i < right
          if array['i'] < 'pivotValue'
              swap array['i'] and array['storeIndex']
              'storeIndex' := 'storeIndex' + 1
      swap array['storeIndex'] and array['right']  // Move pivot to its final place
      return 'storeIndex'
Ini merupakan Algoritma Partisi In-Place. algortima ini memisahkan bagian dari array antara index kiri dan kanan secara inklusif, dengan memindahkan seluruh elemen kurang dari array[pivotIndex] sebelum pivot, dan elemen yang sama atau lebih besar darinya. Dalam prosesnya, algoritma ini juga mencari posisi akhir untuk elemen pivot, yang kembali. algoritma ini secara sementara memindahkan elemen pivot pada akhir dari subarray, sehingga tidak mengganggu proses algoritma. Karena hanya menggunakan penukaran, list akhir memiliki elemen yang sama seperti elemen awalnya. Perlu diperhatikan bahwa elemen ditukan beberapa kali sebelum mencapai tempat akhirnya. Dan juga, jika pivot itu ganda pada inputan array, mereka dapat menyebar pada subarray kanan, pada urutan apapun. Cara ini tidak mewakili kesalahan dalam membagi, dimana pengurutan lebih lanjut akan memindahkan dan akhirnya merekatkan mereka bersama.
Setelah kita memiliki ini, menulis quicksort sendiri ialah mudah:
  function quicksort(array, 'left', 'right')
 
      // If the list has 2 or more items
      if 'left' < 'right'
 
          // See "Choice of pivot" section below for possible choices
          choose any 'pivotIndex' such that 'left''pivotIndex''right'
 
          // Get lists of bigger and smaller items and final position of pivot
          'pivotNewIndex' := partition(array, 'left', 'right', 'pivotIndex')
 
          // Recursively sort elements smaller than the pivot
          quicksort(array, 'left', 'pivotNewIndex' - 1)
 
          // Recursively sort elements at least as big as the pivot
          quicksort(array, 'pivotNewIndex' + 1, 'right')
Setiap pemanggilan rekursif pada fungsi quicksort ini mengurangi besar dari array yang akan diurutkan paling tidak satu elemen, semenjak setiap elemen pada pivotNewIndex diletakkan pada posisi akhirnya. Oleh karena itu, algoritma ini menjamin mengakhiri pemanggilan rekursif pada paling banyak n pemanggilan. Bagaimanapun, versi dari quicksort ini tidak stabil semenjak pengurutan elemen partisi hanya dilakukan pada satu partisi.

Daftar Pustaka http://id.wikipedia.org/wiki/Quicksort
 
 

Total Pageviews

Blogger templates

Popular Posts

Pages