#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define randomize() srand(time(NULL))
#define random(n) (rand() % (n))
#define MAX 6
int arr[MAX]={5,8,3,6,1,2};
void quickSort(int arr[],int left,int Right){
int store ; // 값 교환시 필요
int store2;
int _left= left+1;
int right=Right;
randomize();
int pivot=left+random(Right-left+1);
store=arr[left];
arr[left]=arr[pivot]; // 맨 왼쪽의 값과 랜덤으로 정해진 피벗포인터의 값을 교환한다.
arr[pivot]=store;
printf("_left=%d pivot=%d right=%d\n",_left
,pivot
,right
);
if(left<Right){
while(_left<right){ // 포인터가 교차할 때 까지 반복한다
if(arr[_left]<arr[left]){ // 피벗값보다 큰 값을 만날때 까지 이동한다.
_left++;
}
if(arr[right]>arr[left]){ // 피벗값보다 작은 값을 만날때 까지 이동한다.
right--;
}
if(arr[_left]>arr[left] && arr[right]<arr[left] && _left<right) { // 포인터가 더이상 움직이지 않으면서 교차하지 않았을 때만
store2=arr[_left];
arr[_left]=arr[right]; //포인터가 가리키는 값을 교환한다.
arr[right]=store2;
}
if(_left>right && right!=left){ //포인터가 교차함과 동시에 피벗값을 가리키지 않으면
pivot=right; //오른쪽 포인터가 가르키는 곳을 피벗으로 한다.
store=arr[left];
arr[left]=arr[pivot]; // 맨 왼쪽에 있던 값이랑 피벗값을 교환한다.
arr[pivot]=store;
}
}
for(int i=0;i<MAX;i++){
}
quickSort(arr,left,pivot-1);
quickSort(arr,pivot+1,Right);
}
else
return;
}
int main (void){
quickSort(arr,0,MAX-1);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2RlZmluZSByYW5kb21pemUoKSBzcmFuZCh0aW1lKE5VTEwpKQojZGVmaW5lIHJhbmRvbShuKSAocmFuZCgpICUgKG4pKQojZGVmaW5lIE1BWCA2CgppbnQgYXJyW01BWF09ezUsOCwzLDYsMSwyfTsKCnZvaWQgcXVpY2tTb3J0KGludCBhcnJbXSxpbnQgbGVmdCxpbnQgUmlnaHQpewoJCgkKCWludCBzdG9yZSA7ICAvLyDqsJIg6rWQ7ZmY7IucIO2VhOyalAoJaW50IHN0b3JlMjsKCWludCBfbGVmdD0gbGVmdCsxOwoJaW50IHJpZ2h0PVJpZ2h0OwpyYW5kb21pemUoKTsJCgkKaW50IHBpdm90PWxlZnQrcmFuZG9tKFJpZ2h0LWxlZnQrMSk7CgoKCXN0b3JlPWFycltsZWZ0XTsKCWFycltsZWZ0XT1hcnJbcGl2b3RdOyAgICAvLyDrp6gg7Jm87Kq97J2YIOqwkuqzvCDrnpzrjaTsnLzroZwg7KCV7ZW07KeEIO2UvOuyl+2PrOyduO2EsOydmCDqsJLsnYQg6rWQ7ZmY7ZWc64ukLiAKCWFycltwaXZvdF09c3RvcmU7CgkJCiAgICAgICAgIAogICAgICAgICBwcmludGYoIl9sZWZ0PSVkIHBpdm90PSVkIHJpZ2h0PSVkXG4iLF9sZWZ0LHBpdm90LHJpZ2h0KTsKICAgICAgICAgCiAgIGlmKGxlZnQ8UmlnaHQpewogICAJCgl3aGlsZShfbGVmdDxyaWdodCl7ICAvLyDtj6zsnbjthLDqsIAg6rWQ7LCo7ZWgIOuVjCDquYzsp4Ag67CY67O17ZWc64ukIAoJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgoJCWlmKGFycltfbGVmdF08YXJyW2xlZnRdKXsgIC8vIO2UvOuyl+qwkuuztOuLpCDtgbAg6rCS7J2EIOunjOuCoOuVjCDquYzsp4Ag7J2064+Z7ZWc64ukLgkJCQkJCQoJCSAgICBfbGVmdCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQoJCX0KCQoJaWYoYXJyW3JpZ2h0XT5hcnJbbGVmdF0peyAgIC8vIO2UvOuyl+qwkuuztOuLpCDsnpHsnYAg6rCS7J2EIOunjOuCoOuVjCDquYzsp4Ag7J2064+Z7ZWc64ukLiAgCQkKCQlyaWdodC0tOwoJfQoJICAKICAgaWYoYXJyW19sZWZ0XT5hcnJbbGVmdF0gJiYgYXJyW3JpZ2h0XTxhcnJbbGVmdF0gJiYgX2xlZnQ8cmlnaHQpIHsgICAgLy8g7Y+s7J247YSw6rCAIOuNlOydtOyDgSDsm4Dsp4HsnbTsp4Ag7JWK7Jy866m07IScIOq1kOywqO2VmOyngCDslYrslZjsnYQg65WM66eMIAogICAJc3RvcmUyPWFycltfbGVmdF07CiAgIAlhcnJbX2xlZnRdPWFycltyaWdodF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/tj6zsnbjthLDqsIAg6rCA66as7YKk64qUIOqwkuydhCDqtZDtmZjtlZzri6QuICAgICAgICAgCiAgIAlhcnJbcmlnaHRdPXN0b3JlMjsJCiAgIH0KICAgCiAgIAkJaWYoX2xlZnQ+cmlnaHQgJiYgcmlnaHQhPWxlZnQpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+2PrOyduO2EsOqwgCDqtZDssKjtlajqs7wg64+Z7Iuc7JeQICDtlLzrspfqsJLsnYQg6rCA66as7YKk7KeAIOyViuycvOuptCAgICAKICAgICAgIHBpdm90PXJpZ2h0OyAgICAgICAgICAgLy/smKTrpbjsqr0g7Y+s7J247YSw6rCAIOqwgOultO2CpOuKlCDqs7PsnYQg7ZS867KX7Jy866GcIO2VnOuLpC4gCgkgICAgICAgCiAgICAgCXN0b3JlPWFycltsZWZ0XTsKCQlhcnJbbGVmdF09YXJyW3Bpdm90XTsgICAgLy8g66eoIOyZvOyqveyXkCDsnojrjZgg6rCS7J20656RIO2UvOuyl+qwkuydhCDqtZDtmZjtlZzri6QuIAoJCWFycltwaXZvdF09c3RvcmU7IAoJCQogICAgICB9IAogICAgICAKICAgICAgCgp9CiAgICAgCgkJICAgZm9yKGludCBpPTA7aTxNQVg7aSsrKXsJCglwcmludGYoIiVkIixhcnJbaV0pOwkKfSAgCnB1dHMoIiAiKTsKCiAgICAKICBxdWlja1NvcnQoYXJyLGxlZnQscGl2b3QtMSk7CiAgcXVpY2tTb3J0KGFycixwaXZvdCsxLFJpZ2h0KTsKCQp9CgplbHNlCglyZXR1cm47CgkKfQoKaW50IG1haW4gKHZvaWQpewoJCnF1aWNrU29ydChhcnIsMCxNQVgtMSk7CQoKCQoJCQp9IA==