5 metode sorting dan implementasinya dalam bahasa C

Sorting alias pengurutan, merupakan suatu hal yang sangat dibutuhkan dalam  pemrograman tingkat tinggi. Ada 5 metode sorting, yaitu :

  1. Buble sort merupakan metode pengurutan yang paliong lambar daripada metode pengurutan lainnya. karena, metode ini, melakukan pengurutan dengan cara membandingkan 1 elemen dengn yang lain selama 2 kali looping. Namun, metode ini merupakan metode yang paling mudah digunakan daripada metode yang lainnya
  2. Selection sort yaitu pengurutan dengan cara menyeleksi elemen – elemen ada dalam suatu array. Terdapat 2 kali for loop dalam metode ini, loop yang pertama melakukan seleksi terhadap elemen awal. Loop kedua melakukan seleksi terhadap elemen kedua. Lalu membandingkan antara kedua loop tersebut
  3. Insertion Sort, disebut-  sebut sebagai  metode pertengahan . Artinya, metode ini memiliki kecepatan rata- rata antara metode primitif(buble dan selection) dan modern(merge dan quick). metode ini, didasarkan pada sebuah key yang diambil pada elemen ke-2 pada sebuah array, lalu menyisipkan elemen tersebut jika branching terpenuhi
  4. Merge Sort merupakan algoritma sorting yang sudah menerapkan teknik rekursif. Metode ini bisa dibilang cukup sulit dan membutuhkan pemikiran yang agak berat. Namun, kecepatan yang dihasilkan jauh melebihi metode primitif
  5. Quick Sort . Inilah metode sorting yang tercepat diantara metode 5 metode sorting yang paling umum digunakan. Selain menerapkan teknik rekursif devide and conquer, Teknik ini juga didasarkan pada pivot yang menjadi kunci perbandingan.

Berikut source code-nya :

Buble Sort

//buble sort
#include <stdio.h>
int total,data[10];
void input(){
printf("input a value = ");scanf("%d",&total);
for(int a=0;a<total;a++){
printf("masukkan nilai pada INDEX ke %d = ",a+1);scanf("%d",&data[a]);
}
}
void sort(){
int temp;
 for(int a=0;a<total-1;a++){
 for(int b=0;b<total-1;b++){
 if(data[b]>data[b+1]){
 temp=data[b+1];
 data[b+1]=data[b];
 data[b]=temp;
 }
 }
 }
 }
 void view(){
 for(int a=0;a<total;a++){
 printf("%d  ",data[a]);
 }
 printf("\n");
 }
 int main(){
 input();printf("sebelum di- sorting\n");
view();
sort();
printf("sesudah di- sorting\n");
view();
}

selection sort

//selection sort
#include <stdio.h>
int total,data[10];
void input(){
printf("input a value = ");scanf("%d",&total);
for(int a=0;a<total;a++){
printf("masukkan nilai pada INDEX ke %d = ",a+1);scanf("%d",&data[a]);
}
}
void sort(){
int temp;
for(int a=0;a<total-1;a++){
for(int b=a+1;b<total;b++){
if(data[a]>data[b]){
temp=data[b];
data[b]=data[a];
data[a]=temp;
}
}
}
}
void view(){
for(int a=0;a<total;a++){
printf("%d  ",data[a]);
}
printf("\n");
}
int main(){
input();
printf("sebelum di- sorting\n");
view();
sort();
printf("sesudah di- sorting\n");
view();
}

Insertion Sort


//Insertion Sort

&nbsp;

#include <stdio.h>

int total,data[10];

void input(){

printf("input a value = ");scanf("%d",&total);

for(int a=0;a<total;a++){

printf("masukkan nilai pada INDEX ke %d = ",a+1);scanf("%d",&data[a]);

}

}

void sort(){

int temp,key,i;

for(int a=0;a<total;a++){

key=data[a];

i=a-1;

while(i>=0 && data[i]>key){

data[i+1]=data[i];

i=i-1;

data[i+1]=key;

}

}

}

void view(){

for(int a=0;a<total;a++){

printf("%d  ",data[a]);

}

printf("\n");

}

int main(){

input();

printf("sebelum di- sorting\n");

view();

sort();

printf("sesudah di- sorting\n");

view();

}

Merge Sort menggunakan teknik rekursif

//merge sort
#include <stdio.h>

int total,data[10],salin[10];
void input(){
 printf("input a value = ");scanf("%d",&total);

 for(int a=0;a<total;a++){
 printf("masukkan nilai pada INDEX ke %d = ",a+1);scanf("%d",&data[a]);
 }
}

void merge(int salin[],int lowptr,int highptr,int upperbound){
 int x=0;
 int lowerbound=lowptr;
 int mid=highptr-1;
 int n=upperbound-lowerbound+1;
 while(lowptr<=mid && highptr<=upperbound){
 if(data[lowptr]<data[highptr]){
 salin[x++]=data[lowptr++];
 }
 else{
 salin[x++]=data[highptr++];
 }
 while(lowptr<=mid){
 salin[x++]=data[lowptr++];
 }
 while(highptr<=upperbound){
 salin[x++]=data[highptr++];
 }
 for(int a=0;a<n;a++){
 data[lowerbound+a]=salin[a];
 }

 }
}

void devide(int salin[],int kiri,int kanan){
 if(kiri<kanan){
 int mid=(kiri+kanan)/2;
 devide(salin,kiri,mid);
 devide(salin,mid+1,kanan);
 merge(salin,kiri,mid+1,kanan);
 }
}

void sort(){
 devide(salin,0,total-1);
}

void view(){
 for(int a=0;a<total;a++){
 printf("%d  ",data[a]);
 }
printf("\n");
}

 int main(){
 input();
 printf("sebelum di- sorting\n");
 view();
 sort();
 printf("sesudah di- sorting\n");
 view();
 }

Quick sort menggunakan teknik rekursif

// quickSort.c
#include <stdio.h>

void quickSort( int[], int, int);
int partition( int[], int, int);

int total;
void main()
{
 int     total;
 int a[1000];
 int i;
 printf("masukkan jumlah data total = ");scanf("%d",&total);

 for(i=0;i<total;i++){
 printf("masukkan data index ke %d = ",i+1);scanf("%d",&a[i]);
 }

 printf("\n\nsebelum Di- sorting:  ");
 for(i = 0; i < total; ++i)
 printf(" %d ", a[i]);

 quickSort( a, 0, total-1);

 printf("\n\nsesudah Di- sorting: ");
 for(i = 0; i < total; ++i){
 printf(" %d ", a[i]);}
 printf("\n");
}

void quickSort( int a[], int l, int r)
{
 int j;

 if( l < r )
 {
 // divide and conquer
 j = partition( a, l, r);
 quickSort( a, l, j-1);
 quickSort( a, j+1, r);
 }

}

int partition( int a[], int l, int r) {
 int pivot, i, j, t;
 pivot = a[l];
 i = l; j = r+1;

 while( 1)
 {
 do ++i; while( a[i] <= pivot && i <= r );
 do --j; while( a[j] > pivot );
 if( i >= j ) break;
 t = a[i]; a[i] = a[j]; a[j] = t;
 }
 t = a[l]; a[l] = a[j]; a[j] = t;
 return j;
}

About these ads

5 thoughts on “5 metode sorting dan implementasinya dalam bahasa C

  1. NurElly 06/23/2011 pukul 8:06 pm Reply

    Kira2 mana yah yang membedakkan Metode satu dengan lainnya ? . Kok enggak di kasih komentar

    • xaxioza 06/24/2011 pukul 6:39 pm Reply

      Perbedaannya tentu jelas di metode yang digunakan . pada program diatas, tentu bisa dilihat perbedaannya pada pemanggilan fungsi untuk melakukan sorting. Ada yang menggunakan cara rekursif dan juga ada yang tidak

  2. yukiyuki 07/10/2011 pukul 7:32 pm Reply

    yang java donk…

    • xaxioza 07/11/2011 pukul 11:42 am Reply

      Ditunggu ya.. Next Posting

  3. mbdrian 03/21/2013 pukul 7:19 pm Reply

    cool bro, keren banget

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d bloggers like this: