void Csorts::quick_sort(int array[], int left, int right)
{
int i, j;
int temp;
int pivot;
//중간 과정 보기 함수
view_course(array);
if(left < right) {
// pivot원소를 배열의 가장 끝 원소로 정한다.
pivot = array[right];
// i, j는 배열의 처음과 끝을 나타내는 배열의 첨자(subscript)이다.
i = left - 1;
j = right;
// pivot원소를 중심으로 두 부분리스트로 나눈다.
do {
// 배열의 앞에서 부터 차례대로 pivot원소보다 작은
// 원소들은 그대로 두고, 큰 원소를 만나면 i값을
// 늘리지 않고, 루프문을 빠져나간다.
do {
i++;
} while(array[i] < pivot);
// 배열의 끝에서 부터 차례대로 pivot원소보다 큰
// 원소들은 그대로 두고, 작은 원소를 만나면 j값을
// 줄이지 않고, 루프문을 빠져나간다.
do {
j--;
} while(array[j] > pivot);
// 위의 두 루프문에서 각 부분리스트에 속할 원소들이
// 아닌 원소들은 서로 자리를 바꾸어 준다.
if(i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
} else {
break;
}
} while(i < j);
// pivot원소를 두 부분리스트의 사이에 위치시킨다.
temp = array[i];
array[i] = array[right];
array[right] = temp;
// 각 두 부분리스트에 대해서 위의 과정을 반복한다.
quick_sort(array, left, i - 1);
quick_sort(array, i + 1, right);
}
}
{
int i, j;
int temp;
int pivot;
//중간 과정 보기 함수
view_course(array);
if(left < right) {
// pivot원소를 배열의 가장 끝 원소로 정한다.
pivot = array[right];
// i, j는 배열의 처음과 끝을 나타내는 배열의 첨자(subscript)이다.
i = left - 1;
j = right;
// pivot원소를 중심으로 두 부분리스트로 나눈다.
do {
// 배열의 앞에서 부터 차례대로 pivot원소보다 작은
// 원소들은 그대로 두고, 큰 원소를 만나면 i값을
// 늘리지 않고, 루프문을 빠져나간다.
do {
i++;
} while(array[i] < pivot);
// 배열의 끝에서 부터 차례대로 pivot원소보다 큰
// 원소들은 그대로 두고, 작은 원소를 만나면 j값을
// 줄이지 않고, 루프문을 빠져나간다.
do {
j--;
} while(array[j] > pivot);
// 위의 두 루프문에서 각 부분리스트에 속할 원소들이
// 아닌 원소들은 서로 자리를 바꾸어 준다.
if(i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
} else {
break;
}
} while(i < j);
// pivot원소를 두 부분리스트의 사이에 위치시킨다.
temp = array[i];
array[i] = array[right];
array[right] = temp;
// 각 두 부분리스트에 대해서 위의 과정을 반복한다.
quick_sort(array, left, i - 1);
quick_sort(array, i + 1, right);
}
}
댓글 달기