메뉴 건너뛰기

app

quick sort

박영식2003.11.05 19:58조회 수 2288댓글 0

    • 글자 크기
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);
          }
}
박영식 (비회원)
    • 글자 크기
merge sort (by 박영식) bubble과 selection sort (by 박영식)

댓글 달기

이전 1 ... 5 6 7 8 9 10 11 12 13 14 다음
첨부 (0)
위로