LECTURE 문제 질문입니다. 시간초과가 나오네요 ㅠㅠ ddjddd #include <stdio.h> #include <string.h> void swap (char* pre1, char* pre2, char* set1, char* set2); void qSort (char* str, int start, int end); int qPartitionSort (char* str, int start, int end); int main () { int cases; char str[1024]; scanf("%d", &cases); while (cases--) { scanf("%s", str); qSort(str, 0, strlen(str)-2); printf("%s", str); } return 0; } void swap (char* pre1, char* pre2, char* set1, char* set2) { char* temp; temp = pre1; pre1 = set1; set1 = temp; temp = pre2; pre2 = set2; set2 = temp; return; } void qSort (char* str, int start, int end) { int pivot = 0; if (start < end) { pivot = qPartitionSort (str, start, end); qSort (str, start, pivot-2); qSort (str, pivot+2, end); } } int qPartitionSort (char* str, int start, int end) { int pivot = 0; int left = 0, right = 0; left = start; right = end; pivot = end; while (left < right) { while (*(str + left) < *(str + pivot) || (*(str + left) == *(str + pivot) && *(str + left + 1) < *(str + pivot + 1)) && left > right) { left += 2; } while (*(str + left) > *(str + pivot) || (*(str + left) == *(str + pivot) && *(str + left + 1) >= *(str + pivot + 1)) && left < right) { right -= 2; } if (left < right) { swap (str+left, str + left + 1, str + right, str + right + 1); } swap (str + pivot, str + pivot + 1, str + right, str + right + 1); } return right; } 퀵소트로 구현해보고자 합니다... 책보고 따라 친거라 굉장히 부자연스럽습니다. 코딩을 배운지 얼마 되지 않아 빠르게 구현하는 방법 자체를 모릅니다. 어느부분에서 단축할 수 있는지 알려주시면 고맙습니다! 8년 전
1개의 댓글이 있습니다. Corea swap 함수에서 포인터를 모두 제거해보세요. (pre1, pre2, set1, set2, temp) 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ddjddd
퀵소트로 구현해보고자 합니다... 책보고 따라 친거라 굉장히 부자연스럽습니다.
코딩을 배운지 얼마 되지 않아 빠르게 구현하는 방법 자체를 모릅니다.
어느부분에서 단축할 수 있는지 알려주시면 고맙습니다!
8년 전