class _Quic_Sort2 { _Swap opSwap = new _Swap(); public int partition(int date[], int left, int right) { int pivot, temp; int low,high; low = left; high = right+1; pivot = date[left]; /* 피벗 설정 */ do { do{ low++; /* 왼쪽 리스트에서 피벗보다 큰 레코드 선택 */ }while(low<=right &&date[low]<pivot); do{ high--; /* 오른쪽 리스트에서 피벗보다 작은 레코드 선택 */ }while( high>=left && date[high]> pivot); if(low<high){ opSwap._swap(date, date, low, high ) ; } } while(low<high); /* 인덱스 i,j가 엇갈리지 않는 한 반복 */ opSwap._swap(date , date , left ,high ); /* 인텍스 j가 가리키는 레코드와 피벗 교환 */ return high; } void quick_sort(int date[], int left, int right) { if(left<right){ /* 리스트에 2개 이상의 레코드가 있을 경우 */ int q=partition(date, left, right); quick_sort(date, left, q-1); /* 왼쪽 부분리스트를 퀵정렬 */ quick_sort(date, q+1, right); /* 오른쪽 부분리스트를 퀵정렬 */ } } } |