C Program to sort an array of Strings lexicographically , reverse lexicographically , by number of distinct characters and by length - HackerRank

 


// Program by Akash Tripathi (@proakash256) 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lexicographic_sort(const char *aconst char *b)
{
    return strcmp(ab);
}
int lexicographic_sort_reverse(const char *aconst char *b)
{
    return strcmp(ab);
}
int sort_by_number_of_distinct_characters(const char *aconst char *b)
{
    int c = 1 , d = 1 , flag = 0;
    for(int i = 1i < strlen(a); i = i + 1)
    {
        int j;
        for(j = 0j < ij = j + 1)
        {
            if(a[j] == a[i])
            {
                break;
            }
        }
        if(i == j)
            c = c + 1;
    }
    for(int i = 1i < strlen(b); i = i + 1)
    {
        int j;
        for(j = 0j < ij = j + 1)
        {
            if(b[j] == b[i])
            {
                break;
            }
        }
        if(i == j)
            d = d + 1;
    }
    if(c > d)
    {
        flag = 1;
    }
    else if(c < d)
    {
        flag = -1;
    }
    else if(c == d)
    {
        flag = strcmp(ab);
    }
    return flag;
}
int sort_by_length(const char *aconst char *b)
{
    int c = strlen(a), d = strlen(b) , flag = 0;
    if(c > d)
    {
        flag = 1;
    }
    else if(c < d)
    {
        flag = -1;
    }
    else if(c == d)
    {
        flag = strcmp(ab);
    }
    return flag;
}
void string_sort(char **arrconst int lenint (*cmp_func)(const char *a, const char *b))
{
    static int flag = 1;
    if (flag == 1)
    {
        for (int j = 0j < (len - 1); j = j + 1)
        {
            for (int i = 0i < (len - 1 - j); i = i + 1)
            {
                int c = cmp_func(*(arr + i), *(arr + i + 1));
                if (c > 0)
                {
                    char *temp;
                    temp = malloc(1024 * sizeof(char));
                    strcpy(temparr[i]);
                    temp = realloc(tempstrlen(temp) + 1);
                    strcpy(arr[i], arr[i + 1]);
                    strcpy(arr[i + 1], temp);
                    free(temp);
                }
            }
        }
        flag = flag + 1;
    }
    else if (flag == 2)
    {
        for (int j = 0j < (len - 1); j = j + 1)
        {
            for (int i = 0i < (len - 1 - j); i = i + 1)
            {
                int c = cmp_func(*(arr + i), *(arr + i + 1));
                if (c < 0)
                {
                    char *temp;
                    temp = malloc(1024 * sizeof(char));
                    strcpy(temparr[i]);
                    temp = realloc(tempstrlen(temp) + 1);
                    strcpy(arr[i], arr[i + 1]);
                    strcpy(arr[i + 1], temp);
                    free(temp);
                }
            }
        }
        flag = flag + 1;
    }
    else if (flag == 3)
    {
        for (int j = 0j < (len - 1); j = j + 1)
        {
            for (int i = 0i < (len - 1 - j); i = i + 1)
            {
                int c = cmp_func(*(arr + i), *(arr + i + 1));
                if (c > 0)
                {
                    char *temp;
                    temp = malloc(1024 * sizeof(char));
                    strcpy(temparr[i]);
                    temp = realloc(tempstrlen(temp) + 1);
                    strcpy(arr[i], arr[i + 1]);
                    strcpy(arr[i + 1], temp);
                    free(temp);
                }
            }
        }
        flag = flag + 1;
    }
    else if (flag == 4)
    {
        for (int j = 0j < (len - 1); j = j + 1)
        {
            for (int i = 0i < (len - 1 - j); i = i + 1)
            {
                int c = cmp_func(*(arr + i), *(arr + i + 1));
                if (c > 0)
                {
                    char *temp;
                    temp = malloc(1024 * sizeof(char));
                    strcpy(temparr[i]);
                    temp = realloc(tempstrlen(temp) + 1);
                    strcpy(arr[i], arr[i + 1]);
                    strcpy(arr[i + 1], temp);
                    free(temp);
                }
            }
        }
    }
    return;
}
int main()
{
    int n;
    scanf("%d", &n);

    char **arr;
    arr = (char **)malloc(n * sizeof(char *));

    for (int i = 0i < ni++)
    {
        *(arr + i) = malloc(1024 * sizeof(char));
        scanf("%s", *(arr + i));
        *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);
    }
    printf("\n");
    string_sort(arrnlexicographic_sort);
    for (int i = 0i < ni++)
        printf("%s\n"arr[i]);
    printf("\n");

    string_sort(arrnlexicographic_sort_reverse);
    for (int i = 0i < ni++)
        printf("%s\n"arr[i]);
    printf("\n");

    string_sort(arrnsort_by_length);
    for (int i = 0i < ni++)
        printf("%s\n"arr[i]);
    printf("\n");

    string_sort(arrnsort_by_number_of_distinct_characters);
    for (int i = 0i < ni++)
        printf("%s\n"arr[i]);
    printf("\n");
}

Comments