C - 알고리즘 - 퀵정렬
아휴, 이게 며칠동안 왜 이리 이해가 되지 않았을까요ㅎ
#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;}