while(low<high)
해당 과정을 코드로 정리하면 다음과 같다.
#include <iostream>
#include <vector>
using namespace std;
int partition(vector<int> &list, int left, int right){
int pivot = list[(left+right)/2];
int low = left;
int high = right+1;
while(low <high){
//low가 범위 안에 있고 && 왼쪽 값이 pivot보다 작으면
while(low <right && list[low]<pivot)
low++; //low 오른쪽으로 한칸 이동
//high가 범위 안에 있고 && 오른쪽 값이 pivot보다 크면
while(high>left && list[high]>pivot)
high--; //high 왼쪽으로 한칸이동
//위의 두상황에 어긋나면 값 정렬 변경
if(low <high)
swap(list[low], list[high]);
}
swap(list[left], list[high]);
return high;
}
void quickSort(vector<int> &list, int left, int right){
if(left < right){
int q = partition(list, left, right);
quickSort(list, left, q-1);
quickSort(list, q+1, right);
}
}
int main (){
int n;
cin >> n;
vector<int> numbers;
numbers.assign(n, 0);
//입력
for(int i=0; i<n; i++){
cin >> numbers[i];
}
//연산
quickSort(numbers, 0, n-1);
//출력
for(int i=0; i<n; i++){
cout << numbers[i] << '\n';
}
return 0;
}