TASK
Given an array of strings, you need to implement a function which sorts the strings according to a comparison function, i.e, you need to implement the function :
The arguments passed to this function are:
- an array of strings :
- length of string array:
- pointer to the string comparison function:
You also need to implement the following four string comparison functions:
to sort the strings in lexicographically non-decreasing order.
to sort the strings in lexicographically non-increasing order.
to sort the strings in non-decreasing order of the number of distinct characters present in them. If two strings have the same number of distinct characters present in them, then the lexicographically smaller string should appear first.
to sort the strings in non-decreasing order of their lengths. If two strings have the same length, then the lexicographically smaller string should appear first.
Sample Input 0
4
wkue
qoi
sbv
fekls
Sample Output 0
fekls
qoi
sbv
wkue
wkue
sbv
qoi
fekls
qoi
sbv
wkue
fekls
qoi
sbv
wkue
fekls PROGRAM CODE#include <stdio.h>#include <stdlib.h>#include <string.h>int lexicographic_sort(const char* a, const char* b){ return strcmp(a, b) > 0;}
int lexicographic_sort_reverse(const char* a, const char* b){ return strcmp(a, b) <= 0;}
int sort_by_number_of_distinct_characters(const char* a, const char* b){ int c1 = 0, c2 = 0; int hsh1[26] = {0}, hsh2[26] = {0}; int n1 = strlen(a); int n2 = strlen(b);
for(int i = 0; i < n1; i++){ hsh1[a[i] - 'a'] = 1; }
for(int i = 0; i < n2; i++){ hsh2[b[i] - 'a'] = 1; }
for(int i = 0; i < 26; i++){ if(hsh1[i]) c1++; if(hsh2[i]) c2++; } if( c1 != c2) return c1 > c2; else return strcmp(a, b) > 0;
}
int sort_by_length(const char* a, const char* b){ if(strlen(a) != strlen(b)) return strlen(a) > strlen(b); else return strcmp(a, b) > 0;}
void string_sort(char** arr,const int len,int (*cmp_func)(const char* a, const char* b)){ for(int i = 1; i < len; i++){ int j = i; char* p = arr[i]; while(j > 0){ if((*cmp_func)(arr[j-1],p) > 0 ) arr[j] = arr[j-1]; else break; j--; } arr[j] = p; }}