1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | void q_sort(dataArr data[], int left, int right){ int pivot, l_hold, r_hold; char pivot_name[101]; l_hold = left; r_hold = right; pivot = data[left].age; strcpy(pivot_name, data[left].name); while(left<right){ while((data[right].age>=pivot) && (left < right)){ right--; } if(left != right){ data[left].age=data[right].age; strcpy(data[left].name, data[right].name); } while((data[left].age <= pivot) && (left < right)){ left++; } if(left != right){ data[right].age=data[left].age; strcpy(data[right].name, data[left].name); right--; } } data[left].age = pivot; strcpy(data[left].name, pivot_name); pivot = left; left = l_hold; right = r_hold; if(left < pivot) q_sort(data, left, pivot-1); if(right > pivot) q_sort(data, pivot+1, right); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // 재귀함수 void QuickSort(int *arr, int n) { int left, right; int pv, t; // 갯수가 2 이상이면 if(n > 1){ // 피벗 결정 pv=arr[n-1]; // 좌우 인덱스 설정 및 비교, 교환 left=0; right=n-2; while(1){ while(arr[left] < pv) ++left; while(right && arr[right] > pv) --right; // 시작 인덱스보다 작거나 같으면 값 조사 필요 없다. if(left >= right) break; t=arr[left]; arr[left]=arr[right]; arr[right]=t; ++left; --right; } // 피벗 자리와 left 자리 교환 arr[n-1]=arr[left]; arr[left]=pv; // 좌우측 재귀호출 QuickSort(arr, left); // (left-1)-0+1 QuickSort(arr+left+1, n-left-1); // (n-1)-(left+1)+1 } } | cs |
'컴퓨터 관련' 카테고리의 다른 글
00. Git의 기본. (0) | 2017.03.09 |
---|---|
수 분할 알고리즘 (2) | 2016.07.26 |
1.5. 금액 맞추기 알고리즘 (0) | 2016.07.12 |
파워쉘(PowerShell) 정리 [간단하게] (0) | 2016.07.10 |
쉘 스크립트(Shell Script) 정리 (1) (0) | 2016.07.10 |
댓글