// C#
public void QuickSrot(int[] data, int start, int end)
{
if (start >= end) // 원소가 1개인 경우
{
return;
}
int key = start; // 키는 첫번째 원소
// 인덱스
int i = start + 1;
int j = end;
int temp;
while (i <= j) // 엇갈릴 때까지 반복
{
while (data[i] <= data[key]) // 피봇 값보다 큰 값을 만날 때까지
{
i++;
}
// 피봇 값보다 작은 값을 만날 때까지 && start를 넘어가서 찾지 못하게
while (data[j] >= data[key] && j > start)
{
j--;
}
if (i > j) // 현재 엇갈린 상태면 키 값과 교체
{
temp = data[j];
data[j] = data[key];
data[key] = temp;
}
else
{
temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
QuickSrot(data, start, j - 1);
QuickSrot(data, j + 1, end);
}
// 가독성을 위해 각 기능마다 함수로 분리하면 좋지만, 지금은 편의상 간단하게 구현함