quickSort.arr int[] { 100, 3, 7, 6, 2, 2, 4 };
class QuickSort
{
public int[] arrData;
public void ShowQuickS(Array name, int start, int end)
{
if(start < end)
{
int right = Partition(name, start, end);
ShowQuickS(name, start, right - 1);
ShowQuickS(name, right + 1, end);
}
}
public int Partition(Array name, int start, int end)
{
int pivot = arrData[start];
int left = start+1;
int right = end;
int temp;
while(left < right)
{
while (arrData[left] < pivot && left < right)
{
left++;
}
while (arrData[right] >= pivot && left <= right)
{
right--;
}
if (left < right)
{
temp = arrData[left];
arrData[left] = arrData[right];
arrData[right] = temp;
}
}
if (arrData[start] >= arrData[right])
{
temp = arrData[start];
arrData[start] = arrData[right];
arrData[right] = temp;
}
return right;
}
}
저 굵은 글씨 빼고는 일반적인 퀵 정렬이야. 배열의 크기가 두 개인 경우 무조건 스왑 시키길래 안전장치 하나 만들어 놨는데 속도 차이가 심할까?
퀵 정렬이 원래 이렇게 예외가 심해? 머 좀 건드리면 배열 범위 초과하거나 무한루프 빠지네......
해결됬다. else break로 반복문 빠져나오면 되는거였네......