본문 바로가기
프로그래밍

Quick Sort

by 건우아빠유리남편 2009. 7. 19.
반응형


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

typedef int(*Sort)(void * , void *);

void swap(void *p1, void *p2, int s)
{
 int i;
 char *p3 = (char *)p1;
 char *p4 = (char *)p2;
 char t;

 for(i=0; i<s; ++i)
 {
  t = *(p3+i);
  *(p3+i) = *(p4+i);
  *(p4+i) = t;
 }
}

void sort(void* vp, int sz, size_t size, Sort cmp)
{
 char i, j;
 char *tmp = (char *)vp;
 for(i=0; i<sz; ++i)
 {
  for(j=i+1; j <sz; ++j)
  { 
   if( cmp((tmp+i*size), (tmp+j*size)) > 0)
   {
    swap((tmp+i*size), (tmp+j*size), size);
   }
  }
 }
}

int cmpi(int *pa, int *pb)
{
 // return abs(*pa) < abs(*pb);
 return *pa < *pb;
}

int cmpc(char *pa, char *pb)
{
 return *pa < *pb;
}

int cmpf(double *pa, double *pb)
{
 return *pa > *pb;
}

void main()
{
 int i = 0;
 int integer[10] = { 5,3,-6,-7,9,-4,-2,4,1,8 };
 double f[10]= {2.3,6.6,4.3,1.6,8.5,9.2,6.2,4,1,32};
 char c[10] = "xkdiwasivd";

 sort(integer, 10, sizeof(integer[0]), cmpi);
 sort(c,10,sizeof(c[0]),cmpc);
 sort(f, 10, sizeof(f[0]), cmpf);

 for(i=0; i<10; ++i)
 {
  printf("%d ", integer[i]);
 }

 printf("\n\n");

 for(i=0; i<10; ++i)
 {
  printf("%c ", c[i]);
 }
 
 printf("\n\n");

 for(i=0; i<10; ++i)
 {
  printf("%f\n ",f[i]);
 }
}

 

반응형

'프로그래밍' 카테고리의 다른 글

Valiable Arguments  (0) 2009.07.19
typedef에 관하여  (0) 2009.07.19
Function Pointer EX  (0) 2009.07.19
함수 및 포인터  (0) 2009.07.19
Flexible Array  (0) 2009.07.19

댓글