Tuesday, November 29, 2011

Gnome sort dalam bahasa C


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define MAX 100
#define INPUT 'i'
#define OUTPUT 'o'
#define _MY_DEBUG
#if defined(_MY_DEBUG)
 #define TRACE_LINE printf("\n\n- Program Statistics :\n1. File : %s\n2. Date : %s\n3. Time : %s\n",__FILE__,__DATE__,__TIME__);
#else
 #define TRACE_LINE
#endif

void InputOutput(int*, const int, const char);
void GnomeSort(int*, const int);
void Swap(int*, int*);
void FreeBuffer(int*);

int main(int argc, char *argv[]) {
 system("COLOR 3");
 int *buffer = NULL, max;
 printf("Implementasi Gnome Sort\nMasukkan jumlah data [MAX:100] : ");
 scanf("%d",&max);
 fflush(stdin);
 if((max > 0) && (max <= MAX)) {
  buffer = (int*)calloc(max,sizeof(int));
  InputOutput(buffer,max,INPUT);
  printf("\nData yang anda masukkan : ");
  InputOutput(buffer,max,OUTPUT);
  GnomeSort(buffer,max);
  printf("\nData setelah disorting : ");
  InputOutput(buffer,max,OUTPUT);
  FreeBuffer(buffer);
 } TRACE_LINE;
 getch();
 fflush(stdin);
 return(EXIT_SUCCESS);
}

void InputOutput(int* buffer, const int max, const char STAT) {
 int i;
 if('i' == STAT) {
  for(i = 0; i < max; ++i) {
   printf("%d. Data ke-%d : ",(i+1),(i+1));
   scanf("%d",&buffer[i]);
   fflush(stdin);
  }
 } else if('o' == STAT) {
  for(i = 0; i < max; ++i) {
   printf("%d ",buffer[i]);
  }
 }
}

void GnomeSort(int* buffer, const int max) {
 int i;
 for(i = 1; i < max;) {
  if(buffer[i-1] <= buffer[i]) {
   ++i;
  } else {
   Swap(&buffer[i],&buffer[i-1]); --i;
   if(!i) {
    i = 1;
   }
  }
 }
}

void Swap(int* buffer1, int* buffer2) {
 int tmp = *buffer1;
 *buffer1 = *buffer2;
 *buffer2 = tmp;
}

void FreeBuffer(int* buffer) {
 free(buffer);
 buffer = NULL;
}

No comments:

Post a Comment