퀵소트 인데 실행하면 다 잘되는데 마지막 값이 이상하게 다른값이 나온다 ㅜㅜ

void quickSort(int* b, int low, int high)
{
 int q;

 if(low<high)
 {
  q=partition(b,low, high);//분할함수 호출 기준값 q를 반환

  quickSort(b, low, q-1);//q를 중심으로 왼쪽 배열 정렬
  quickSort(b, q+1, high);//q를 중심으로 오른쪽 배열 정렬
 }
}

int partition(int* b, int low, int high)
{
 int x=b[high];//배열 맨 끝을 기준으로 한다.
 int i=low-1;//i는 1구역의 끝지점
 int j=low;//j는 3구역의 시작지점
 int temp;//값을 교환하기위한 공간

 while(j<high-1)//마지막 기준값 전까지 반복한다
 {
  
  if(b[j]<=x)//3구역값이 기준값보다 작거나 같으면 i값 증가 후 교환한다
  {
   i++;
   temp=b[i];
   b[i]=b[j];
   b[j]=temp;
  }
  j++;//기준값보다 크면 j값을 증가시킨다
 }
 //기준값과 2구역 첫원소를 교환한다
 temp=b[i+1];
 b[i+1]=b[high];
 b[high]=temp;

 return i+1;// 기준값 리턴
}