아휴, 이게 며칠동안 왜 이리 이해가 되지 않았을까요ㅎ
#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;}
'2_ 바삭바삭 프로그래밍' 카테고리의 다른 글
C - 알고리즘 - 더블링크드리스트(상) (0) | 2010.06.01 |
---|---|
C - 알고리즘 - 퀵정렬(라이브러리) (0) | 2010.05.29 |
C - 알고리즘 - 삽입정렬 (3) | 2010.05.15 |
C - 알고리즘 - 버블정렬 (0) | 2010.05.14 |
C - 싱글링크드리스트(문자열) (0) | 2010.05.13 |