LECTURE 문제 질문입니다. 시간초과가 나오네요 ㅠㅠ

  • ddjddd
    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
    Corea

    swap 함수에서 포인터를 모두 제거해보세요. (pre1, pre2, set1, set2, temp)


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.