Global

Global

Minggu, 27 Maret 2011

Perbedaan Bubble sort,Merge sort dan Quick sort


Pengertian Sorting sort

Sorting Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat 2 cara pengurutan data yaitu
– Ascending : Pengurutan dilakukan mulai dari nilai terkecil menuju nilai terbesar
– Descending: Pengurutan dilakukan mulai dari nilai terbesar menuju nilai terkecil
Ada beberapa macem metoda pengurutan data diantaranya :
  1. Bubble Sort
  2. Selection Sort
  3. Insertion Sort
  4. Merge Sort
  5. Quick Sort
@. Bubble Sort

pengertian bubble sort
Bubble sort adalah sederhana algoritma sorting. It works by repeatedly stepping through the list to be sorted, comparing two items at a time and swapping them if they are in the wrong order. Bekerja dengan berulang kali melakukan melalui daftar akan di sortir, membandingkan dua item sekaligus dan swapping mereka jika mereka berada di salah pesanan. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. Yang melewati daftar diulang sampai swap tidak diperlukan, yang menunjukkan bahwa daftar disaring. The algorithm gets its name from the way smaller elements "bubble" to the top of the list. Algoritma yang mendapatkan namanya dari jalan kecil elemen "gelembung" ke bagian atas daftar. Because it only uses comparisons to operate on elements, it is a comparison sort . Karena hanya menggunakan perbandingan untuk beroperasi pada elemen, ia adalah perbandingan menyortir.

Bubble sort-kasus yang terburuk dan rata-rata kompleksitas kedua О (n ²), dimana n adalah jumlah item yang disortir. There exist many sorting algorithms with the substantially better worst-case or average complexity of O ( n log n ). Di sana ada banyak algoritma sorting dengan lebih baik substansial terburuk-kasus atau rata-rata kompleksitas O (n log n). Therefore bubble sort is not a practical sorting algorithm when n is large, except in rare specific applications where the array is known to be very close to being already sorted initially. Oleh karena itu gelembung menyortir tidak praktis algoritma sorting ketika n adalah besar, kecuali di langka di mana aplikasi spesifik deret diketahui sangat dekat dengan yang telah disortir awalnya.

Langkah-langkah oleh-contoh

Let us take the array of numbers "5 1 4 2 8", and sort the array from lowest number to greatest number using bubble sort algorithm. Mari kita nomor yang deret "5 1 4 2 8", dan menyusun deret dari terendah ke nomor terbesar nomor menggunakan gelembung sort Algoritma. In each step, elements written in bold are being compared. Dalam setiap langkah, unsur-unsur yang ditulis dalam huruf tebal sedang dibandingkan.

First Pass: Pertama Pass:
( 5 1 4 2 8 ) (5 1 4 2 8) \ untuk ( 1 5 4 2 8 ) Here, algorithm compares the first two elements, and swaps them. (1 5 4 2 8) Di sini, Algoritma membandingkan dua elemen pertama, dan mereka swap.
( 1 5 4 2 8 ) (1 5 4 2 8) \ untuk ( 1 4 5 2 8 ) (1 4 5 2 8)
( 1 4 5 2 8 ) (1 4 5 2 8) \ untuk ( 1 4 2 5 8 ) (1 4 2 5 8)
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 4 2 5 8 ) Now, since these elements are already in order, algorithm does not swap them. (1 4 2 5 8) Sekarang, sejak elemen ini sudah dalam rangka, algoritma tidak swap mereka.
Second Pass: Kedua Pass:
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 4 2 5 8 ) (1 4 2 5 8)
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
Now, the array is already sorted, but our algorithm does not know if it is completed. Kini, deret sudah disortir, tetapi kami tidak Algoritma tahu jika sudah selesai. Algorithm needs one whole pass without any swap to know it is sorted. Algoritma satu kebutuhan seluruh lulus tanpa swap untuk mengetahui itu disortir.
Third Pass: Ketiga Pass:
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
Finally, the array is sorted, and the algorithm can terminate. Akhirnya, deret disaring, dan algoritma dapat menghentikan.

[ edit ] Pseudocode implementation [Sunting] Pseudocode pelaksanaan

A simple way to express bubble sort in pseudocode is as follows: Cara mudah untuk menyortir ekspres gelembung di pseudocode adalah sebagai berikut:

procedure bubbleSort( A : list of sortable items ) defined as: do swapped := false for each i in 0 to length( A ) - 1 do: if A[ i ] > A[ i + 1 ] then swap( A[ i ], A[ i + 1 ] ) swapped := true end if end for while swapped end procedure 

The algorithm can also be expressed as: Algoritma yang juga dapat dinyatakan sebagai:

procedure bubbleSort( A : list of sortable items ) defined as: for each i in 1 to length(A) do: for each j in length(A) downto i + 1 do: if A[ j - 1 ] > A[ j ] then swap( A[ j - 1], A[ j ] ) end if end for end for end procedure 


The difference between this and the first pseudocode implementation is discussed later in the article . Perbedaan antara ini dan pertama pelaksanaan pseudocode dibahas dalam artikel nanti.

[ edit ] Alternative implementations [Sunting] Alternatif implementasi

One way to optimize bubblesort is to note that, after each pass, the largest element will always move down to the end. Salah satu cara untuk mengoptimalkan bubblesort adalah untuk dicatat bahwa, masing-masing setelah lulus, terbesar elemen akan selalu berpindah ke akhir. During each comparison, it is clear that the largest element will move downwards. Selama setiap perbandingan, jelas bahwa unsur terbesar akan berpindah ke bawah. Given a list of size n , the n th element will be guaranteed to be in its proper place. Mengingat daftar ukuran n, n th elemen yang akan dijamin untuk berada di tempat yang tepat. Thus it suffices to sort the remaining n - 1 elements. Oleh karena itu cukup untuk memilah sisa n - 1 elemen. Again, after this pass, the n - 1 th element will be in its final place. Sekali lagi, setelah lulus ini, yang n - 1 th elemen akan di tempat yang terakhir.

Metode Bubble Sort
Perhatikan bahwa jumlah pertukaran dan perbandingan data tidaklah tetap, perbedaan tergantung pada keadaan awal data setelah diacak. Tabel berikut memperlihatkan tabulasi hasil visualisasi menggunakan metode bubble sort.
PengacakanJumlah Total
Pertukaran DataPerbandingan Data
1155279
2127272
3137245
4142297
5151294
6138285
7178300
8165272
9156285
10175300
Rata-rata152283
Jumlah rata-rata pertukaran untuk 10 kali pengacakan adalah 152 kali, sedangkan rata-rata jumlah perbandingan adalah sebanyak 283 kali. Tetapi bila data pada awalnya terurut, maka untuk 25 jumlah data, jumlah pertukaran data sebanyak 0 kali dengan jumlah perbandingan sebanyak 24 kali.


contoh program
#include
#define MAX_LINE 1024

void discardnewline(char s[])
{
int i;
for(i = 0; s[i] != ”; i++)
{
if(s[i] == ‘\n’)
s[i] = ”;
}
}

int reverse(char s[])
{
char ch;
int i, j;

for(j = 0; s[j] != ”; j++)
{
}

–j;

for(i = 0; i 0)
{
discardnewline(line);
reverse(line);
printf(”%s\n”, line);
}
return 0;
}

@. Selection Sort

Pengertian tentang selection sort adalah Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.


SOURCE CODE
void insertsort (int x[], int n)
{
int i, k, y
for (k=1, ky=x [k];
for (i=k-1;i>=0&&y
x[i+1]=y;
}
}

@Insertion Sort

Pengertian Insertion Sort adalah Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.
SOURCE CODE
void insertsort (int x[], int n)
{
int i, k, y
for (k=1, k
y=x [k];
for (i=k-1;i>=0&&y
x[i+1]=y;
}
}

@. Merge Sort
Pengertian Merge Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar. Algoritmanya sebagai berikut:
Selama p0..n masih menunjuk data yang di dalam sebagai pengganti pada akhirnya:
1.Melakukan sesuatu dengan data item yang menunjuk daftar mereka masing-masing.
2.Menemukan pointers points untuk item dengan kunci yang paling rendah; membantu salah satu pointer untuk item yang berikutnya dalam daftar.

Pada umumnya algoritma merge berjalan dalam waktu proposional untuk penjumlahan pada panjangnya daftar; Algoritma merge beroperasi pada bilangan besar dalam daftar yang akan segera mengalikan penjumlahan panjangnya daftar pada saat itu untuk keluaran gambar pointers points yang mana menunjuk pada item yang paling rendah, yang dapat terpengaruhi dengan suatu heap(tumpukan) yang didasarkan prioritas antrian dalam O(lg n) waktu, untuk O(m lg n) waktu (dimana n adalah bilangan pada daftar yang digabungkan, m adalah penjumlahan panjangnya daftar, dan lg adalah log basis 2). Ketika menggabungkan panjang m dua daftar, terdapat suatu perbandingan lompatan yang lebih rendah 2m-1 yang ada dalam kasus terburuk.
Keluaran data item Merge klasik (satu yang digunakan dalam merge sort) dengan kunci yang paling rendah pada langkah masing-masing, memberikan beberapa daftar yang diurutkan, hasil daftar yang diurutkan berisi semua unsur-unsur di dalam daftar input manapun, dan hal itu dilakukan agar waktunya proporsioal untuk input penjumlahan panjangnya daftar.

B.Contoh Algoritma Merge Sort
Ide algoritma ini hampir mirip dengan QuickSort, yaitu melakukan partisi. Kecuali bahwa algoritma ini melakukan partisi tanpa kriteria. Jadi, data set (X[l] ... X[r]) di partisi langsung ke dua sub data set dengan jumlah data yang sama (X[l] ... X[(l+r)/2], dan X[(l+r)/2+1] ... X[r]). 
Lalu secara rekursif melakukan Merge Sort untuk masing-masing data set. Karena kedua data set itu bisa overlapping (tidak seperti pada Quick Sort) maka setelah kedua sub data set terurut masih memerlukan proses penggabungan (Merging). Merging ini memerlukan ruang tambahan yaitu suatu array yang sama panjangnya dengan panjang kedua sub set untuk menyimpan hasilnya. 
Untuk Merge Sort dalam beberapa bahasa pemrograman yang ada pada saat ini untuk listing programnya hampir sama. Berikut ini merupakan salah satu contoh Listing Program yang biasa digunakan.

Contoh:
void MergeSort(int l,int r) {
if (l <>
MergeSort(l,(l+r)/2);
MergeSort((l+r)/2,r);
Merging();
}
}

@. Quick Sort
Pengerian Quick Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar. Algoritmanya sebagai berikut:
Selama p0..n masih menunjuk data yang di dalam sebagai pengganti pada akhirnya:
1.Melakukan sesuatu dengan data item yang menunjuk daftar mereka masing-masing.
2.Menemukan pointers points untuk item dengan kunci yang paling rendah; membantu salah satu pointer untuk item yang berikutnya dalam daftar.

Pada umumnya algoritma merge berjalan dalam waktu proposional untuk penjumlahan pada panjangnya daftar; Algoritma merge beroperasi pada bilangan besar dalam daftar yang akan segera mengalikan penjumlahan panjangnya daftar pada saat itu untuk keluaran gambar pointers points yang mana menunjuk pada item yang paling rendah, yang dapat terpengaruhi dengan suatu heap(tumpukan) yang didasarkan prioritas antrian dalam O(lg n) waktu, untuk O(m lg n) waktu (dimana n adalah bilangan pada daftar yang digabungkan, m adalah penjumlahan panjangnya daftar, dan lg adalah log basis 2). Ketika menggabungkan panjang m dua daftar, terdapat suatu perbandingan lompatan yang lebih rendah 2m-1 yang ada dalam kasus terburuk.
Keluaran data item Merge klasik (satu yang digunakan dalam merge sort) dengan kunci yang paling rendah pada langkah masing-masing, memberikan beberapa daftar yang diurutkan, hasil daftar yang diurutkan berisi semua unsur-unsur di dalam daftar input manapun, dan hal itu dilakukan agar waktunya proporsioal untuk input penjumlahan panjangnya daftar.

B.Contoh Algoritma Merge Sort
Ide algoritma ini hampir mirip dengan QuickSort, yaitu melakukan partisi. Kecuali bahwa algoritma ini melakukan partisi tanpa kriteria. Jadi, data set (X[l] ... X[r]) di partisi langsung ke dua sub data set dengan jumlah data yang sama (X[l] ... X[(l+r)/2], dan X[(l+r)/2+1] ... X[r]). 
Lalu secara rekursif melakukan Merge Sort untuk masing-masing data set. Karena kedua data set itu bisa overlapping (tidak seperti pada Quick Sort) maka setelah kedua sub data set terurut masih memerlukan proses penggabungan (Merging). Merging ini memerlukan ruang tambahan yaitu suatu array yang sama panjangnya dengan panjang kedua sub set untuk menyimpan hasilnya. 
Untuk Merge Sort dalam beberapa bahasa pemrograman yang ada pada saat ini untuk listing programnya hampir sama. Berikut ini merupakan salah satu contoh Listing Program yang biasa digunakan.

Contoh:
void MergeSort(int l,int r) {
if (l <>
MergeSort(l,(l+r)/2);
MergeSort((l+r)/2,r);
Merging();
}
}

Tidak ada komentar:

Posting Komentar