functionpartition2 (array, start, end) { // 맨 마지막이나 맨 처음으로 설정했던 pivot값을 배열의 중간값으로 설정 const pivotValue = array[ Math.floor((start + end) / 2) ];
// 양 끝의 인덱스를 하나씩 늘리거나 하나씩 줄이면서 // 피봇값보다 작은 값인 start와 피봇값보다 큰 값인end값을 구함 while (start <= end) { while (array[start] < pivotValue) start = start + 1; while (array[end] > pivotValue) end = end - 1; // start값이 end값보다 크단 뜻은 배열을 한번 다 돌았다는 뜻임 if (start <= end) { // 이 구문을 들어온다는 뜻은 배열을 돌면서 pivotValue보다 // 큰 값(array[start]값)과 작은 값(array[end]값)의 두 값을 교체해줌 swap(array, start, end); start = start + 1; end = end - 1; } } // 이 과정이 끝나면 pivotValue보다 작은 값은 왼쪽에, 큰 값은 오른쪽으로 정렬되었단 뜻이므로 // 해당 인덱스 값을 리턴하여 다시 배열을 둘로 쪼갬 return start; }