Sorting Part II
Shell Sort
Metode ini disebut juga dengan metode pertambahan menurun (diminishing increment)
yang dikembangkan oleh Donald L. Shell, sehingga sering disebut dengan Metode
Shell Sort. Metode ini mengurutkan data dengan cara membandingkan suatu data
dengan data lain yang memiliki jarak tertentu, kemudian dilakukan penukaran bila
diperlukan
Algorithm
int main()
{
int arr[] = {12, 34, 54, 2, 3}, i;
int n = sizeof(arr)/sizeof(arr[0]);
shellSort(arr, n);
return 0;
}
Selection Sort
Merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan dicari
elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar akan
dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari
data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran
kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama
proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja,
pertukaran data secara fisik terjadi pada akhir proses.
Merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan dicari
elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar akan
dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari
data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran
kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama
proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja,
pertukaran data secara fisik terjadi pada akhir proses.
Algorithm
1. Starting from the first element, we search the smallest element in the array, and
2. We then move on to the second position, and look for smallest element present
3. We replace the element at the second position in the original array, or we can
say at the first position in the subarray, with the second smallest element.
int main()
{
int arr[] = {46, 52, 21, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
Merge Sort
Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang
untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak
memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang
terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945.
Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and
conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian kemudian
menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian
pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data
ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing
blok sampai hanya terdiri dari satu data tiap blok.
Setelah itu digabungkan kembali dengan membandingkan pada blok yang sama
apakah data pertama lebih besar daripada data ke-tengah+1, jika ya maka data
ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama sampai
ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya
sampai menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort
merupakan metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.
Algorithm
1. Divide the problem into multiple small problems.
2. Conquer the subproblems by solving them. The idea is to break down the
problem into atomic subproblems, where they are actually solved.
3. Combine the solutions of the subproblems to find the solution of the actual
problem.
/*
a[] is the array, p is starting index, that is 0,
and r is the last index of array.
*/
#include <stdio.h>
// lets take a[5] = {32, 45, 67, 2, 7} as the array to be sorted.
while(i <= q)
{
b[k++] = a[i++];
}
while(j <= r)
{
b[k++] = a[j++];
}
int main()
{
int arr[] = {32, 45, 67, 2, 7};
int len = sizeof(arr)/sizeof(arr[0]);
Sumber
http://elektro.um.ac.id/wp-content/uploads/2016/04/MODUL-8-SORTING.pdf
https://sites.google.com/site/riksongultom/algoritma-pemrograman/insertion-sort
https://www.studytonight.com/data-structures/bubble-sort
https://www.geeksforgeeks.org/shellsort/
http://yuliana.lecturer.pens.ac.id/Struktur%20Data%20C/Prak%20SD%20-%20pdf/
Praktikum%208.pdf