Sorting Array of Strings

  • + 0 comments
    int lexicographic_sort(const char* a, const char* b) {
        return strcmp(a, b); 
    }
    
    int lexicographic_sort_reverse(const char* a, const char* b) {
        return strcmp(b, a);
    }
    
    int sort_by_number_of_distinct_characters(const char* a, const char* b) {
        int count_a = 0, count_b = 0;
        int char_count[26];
        memset(char_count,1,sizeof(char_count));
    
        for (const char* p = a; *p != '\0'; p++) {
            if (char_count[*p - 'a']) {
                char_count[*p - 'a'] = 0;
                count_a++;
            }
        }
    
        memset(char_count, 1, sizeof(char_count));
    
        for (const char* p = b; *p != '\0'; p++) {
            if (char_count[*p - 'a']) {
                char_count[*p - 'a'] = 0;
                count_b++;
            }
        }
    
        if (count_a == count_b) {
            return strcmp(a, b);
        } else {
            return count_a - count_b;
        }
        return 0;
    }
    
    int sort_by_length(const char* a, const char* b) {
        if(strlen(a) > strlen(b)){
            return 1;
        }
        else if(strlen(a) < strlen(b)){
            return -1;
        }
        else if(strlen(a) == strlen(b)){
            return strcmp(a, b);
        }
        return 0;
    }
    
    void string_sort(char** arr,const int len,int (*cmp_func)(const char* a, const char* b)){
        for (int i = 0; i < len-1 ; i++) {
            if (cmp_func(arr[i], arr[i+1]) > 0) {
                char* temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
                i = -1;
            }
        }
    }