먼저 퀵소트 logic에 대해서 매우 잘 정리해놓은 사이트

http://blog.naver.com/soonchan86/130038826417

아래는 함수

http://blog.naver.com/myfd/90072567409

typedef struct {

      int iManuf;
      int iID;

      char cStr[256];
      char cName[64];

} cDBTFILE

void Swap(cDBTFILE v[], int i, int j)
{
      cDBTFILE tmp;
      memset(&tmp, 0x00, sizeof(cDBTFILE));

      memcpy(&tmp, &v[i], sizeof(cDBTFILE));
      memcpy(&v[i], &v[j], sizeof(cDBTFILE));
      memcpy(&v[j], &tmp, sizeof(cDBTFILE));
}

void QuickSort(cDBTFILE v[], int Begin, int End)
{
      int left,right,key;

      if ( !(Begin < End) ) return;

      key=v[End].iManuf;                          // 키값 : v.iManuf
      left=Begin-1;
      right=End;
      while(left < right ) {
            while (v[++left].iManuf < key);    // 키값 v.iManuf
            while (v[--right].iManuf > key);  // 키값이 세 군데가 있다. 세 군데만 바꿔주면 다른 키로 소트 가능
            if (left >= right) break;
            Swap(v, left, right);
      }

      Swap(v, left, End);
      QuickSort(v, Begin, left-1);
      QuickSort(v, left+1, End);
}

void main(void)

{

      cDBTFILE *DBTFile = new cDBTFILE[500]; // 대충 값 넣고

      QuickSort(DBTFile, 0, Line );  // 퀵소트 호출

}

Posted by yyht
,