본문 바로가기
2_ 바삭바삭 프로그래밍

C - 알고리즘 - 퀵정렬

by 준환이형님_ 2010. 5. 22.

아휴, 이게 며칠동안 왜 이리 이해가 되지 않았을까요ㅎ

#include <stdio.h>
#define SWAP(x,y,t) (t=x), (x=y), (y=t); //스왑을 간단하게

void partition(int data[],int length){
 int temp=NULL;
 int head=-1;
 int tail=length-1;
 int pivot=data[tail]; //끝자락의 아무 아이가 합격선이 되겠네요.. 좋은 방법은 아니라지만 전 쉬워서 좋아요 :D
 if(length<1){return;}  
 while(true)
 {
  while(data[++head]<pivot); //머리에서부터  잡아냄
  while(data[--tail]>pivot); 
  if(head>=tail) break;  //머리가 추월시 끝냄
  SWAP(data[head],data[tail],temp);
 }
 SWAP(data[length-1],data[head],temp); //마지막에는 기준을 가운데 쏙 넣어줌

 partition(data,head);//첨부터 가운데까지
 partition(data+head+1,length-head-1);//가운데서 끝까지
 return;}

int main(void)
{
 int data_box[]={6,4,7,3,8,2,9,0,1,5};
 int box_lenth= sizeof data_box/sizeof data_box[0];
 partition(data_box,box_lenth);
 for(int i=0;i<box_lenth;i++){printf("%d ",data_box[i]);}printf("\n");
 return NULL;}