Sorting dalam Bahasa C
Tuesday, August 11, 2015
Array
,
Contoh Program
,
Kondisi
,
Looping
,
Rekursif
Sorting atau Pengurutan seringkali digunakan dalam beberapa kasus program tingkat tinggi. Di dalam bahasa c terdapat 5 metode sorting atau pengurutan, yaitu :
1. Bubble Sort
2. Selection Sort
3. Insertion Sort
4. Merge Sort
5. Quick Sort
1. Bubble Sort
Bubble sort merupakan metode yang paling mudah digunakan dan merupakan metode sorting paling lambat, karena membandingkan elemen 1 dengan elemen lainnya dengan dua kali looping.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 5
main()
{
int arr[max], i, j, temp;
printf("\n\t\tBubble Sort Ascending\n\n");
for(i=0; i<max; i++)
{
printf("Masukkan Angka\t\t\t\t: \t");
scanf("%d",&arr[i]);
}
for(i=0; i<max ; i++)
{
for(j=0; j<(max-1)-i; j++)
{
if( arr[j] > arr[j+1] )//ubah panah jika ingin dijadikan descending
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
printf("Data yang terurut secara Ascending\t:\n");
for(i=0; i<max; i++)
printf("\t\t\t\t\t\t%d\n",arr[i]);
}
2. Selection Sort
Selection sort melakukan pengurutan dengan cara menyeleksi setiap elemen pada array, kemudian membandingkan elemen pada loop pertama dengan elemen pada loop kedua.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 5
main()
{
int arr[max], i, j, swap;
printf("\n\t\tSelection Sort Ascending\n\n");
for ( i = 0 ; i < max ; i++ )
{
printf("Masukkan Angka\t\t\t\t:\t");
scanf("%d", &arr[i]);
}
for ( i = 0 ; i < ( max - 1 ) ; i++ )
{
for ( j = i + 1 ; j < max ; j++ )
{
if ( arr[i] > arr[j] )//ubah panah jika ingin dijadikan descending
{
swap = arr[i];
arr[i] = arr[j];
arr[j] = swap;
}
}
}
printf("Data yang terurut secara Ascending\t:\t\n");
for ( i = 0 ; i < max ; i++ )
printf("\t\t\t\t\t\t%d\n", arr[i]);
}
3. Insertion Sort
Insertion sort melakukan pengurutan dengan cara setiap elemen dicek satu per satu hingga akhir jika ditemukan elemen yang lebih kecil maka akan disisipkan pada posisi yang sesuai.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 5
main()
{
int arr[max], i, j, t;
printf("\n\t\tInsertion Sort Ascending\n\n");
for ( i = 0 ; i < max ; i++ )
{
printf("Masukkan Angka\t\t\t\t:\t");
scanf("%d", &arr[i]);
}
for (i = 1 ; i <= (max - 1); i++)
{
j = i;
while ( j > 0 && arr[j] < arr[j-1])//ubah panah setelah arr[j] jika ingin dijadikan descending
{
t = arr[j];
arr[j] = arr[j-1];
arr[j-1] = t;
j--;
}
}
printf("Data yang terurut secara Ascending\t:\t\n");
for (i = 0; i <= max - 1; i++)
printf("\t\t\t\t\t\t%d\n", arr[i]);
}
4. Merge Sort
Merge sort melakukan pengurutan dengan cara menggabungkan 2 data lalu mengurutkannya hingga menjadi satu data saja. Teknik merge sort memerlukan fungsi rekursif.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 5
main()
{
int a[max], b[max], c[total], i, j, t, k = 0;
printf("\n\t\t\tMerge Sort Ascending\n\n");
for (i = 0; i < max; i++)
{
printf("Data Pertama\t\t\t\t:\t");
scanf("\t%d", &a[i]);
}
for (i = 0; i < max; i++)
{
printf("Data Kedua \t\t\t\t:\t");
scanf("\t%d", &b[i]);
}
for(i=0; i<max; i++)
{
for(j=i+1; j<max; j++)
{
if(a[i] > a[j])//ubah arah panah jika ingin dijadikan descending
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0; i<max; i++)
{
for(j=i+1; j<max; j++)
{
if(b[i] > b[j])//ubah arah panah jika ingin dijadikan descending
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
j=0;
t=0;
for(i=0; i<max+max;)
{
if(a[j] < b[t])//ubah arah panah jika ingin dijadikan descending
{
c[i++]=a[j++];
}
else
{
c[i++]=b[t++];
}
if(j==max || t==max)
{
break;
}
}
for(; j < max;)
{
c[i++]=a[j++];
}
for(; t < max;)
{
c[i++]=b[t++];
}
printf("\nData setelah di gabungkan\t\t:\t\n");
for (i = 0; i < max+max; i++)
{
printf("\t\t\t\t\t\t%d\n", c[i]);
}
}
5. Quick Sort
Quick sort sesuai namanya "quick" merupakan teknik sorting paling cepat, Menggunakan teknik rekursif, teknik pivot (tumpuan) untuk menjadi kunci perbandingan, dan teknik divide and conquer.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define max 5
main()
{
int arr[max],n,i;
void quicksort(int arr[], int find, int lind)// find=First Index, lind= Last Index, ind1= index 1, ind2= index 2
{
int pind, temp, ind1, ind2;
if(find < lind)
{
pind = find;
ind1 = find;
ind2 = lind;
while(ind1 < ind2)
{
while(arr[ind1] <= arr[pind] && ind1 < lind)//ubah arah panah jika ingin dijadikan descending
{
ind1++;
}
while(arr[ind2]>arr[pind])//ubah arah panah jika ingin dijadikan descending
{
ind2--;
}
if(ind1<ind2)
{
temp = arr[ind1];
arr[ind1] = arr[ind2];
arr[ind2] = temp;
}
}
temp = arr[pind];
arr[pind] = arr[ind2];
arr[ind2] = temp;
quicksort(arr, find, ind2-1);
quicksort(arr, ind2+1, lind);
}
}
printf("\n\n\t\tQuick Sort Ascending\n\n");
for(i = 0; i < max; i++)
{
printf("Masukkan Angka\t\t\t\t:\t");
scanf("%d",&arr[i]);
}
quicksort(arr,0,max-1);
printf("Data yang terurut secara Ascending\t:\t\n");
for(i=0;i<max;i++)
printf("\t\t\t\t\t\t%d\n",arr[i]);
}
