#include <stdio.h>

struct str
{
    char sim;
    int count;
};
struct str freq_tabls[ 256 ];
void parse_string(const char* str)//подсчет количества символов
{
int i;
 for(i=0;i<256;++i)
  {
  freq_tabls[i].sim=i;
  freq_tabls[i].count=0;
  }
 while(*str) 
  freq_tabls[(unsigned char)*str++].count++;
}
void bubbleSort( struct str *b,  int size )
{
    struct str tmp;
    int i, j;
    for(i = 0; i < size - 1; ++i)
    {            
        for(j = 0; j < size - 1; ++j)
        {     
            if (b[j + 1].count > b[j].count)  // обрати внимание, что знак д.б. "больше", т.к. тебе надо сортировать по убыванию
            {
                tmp = b[j + 1]; 
                b[j + 1] = b[j];   // вот тут копируется как ключ (count), так и символ (sim)
                b[j] = tmp;
            }
        }
    }
}

int main()
{
    char string[1024];
    int i;
    printf( "\n\nВведите строчку: \n" ); 
    gets(string);
    printf( "\nЗадание 2.\n Отсортировать символы в строке в порядке убывания частоты их встречаемости\n\n" ); 
    parse_string( string );
    bubbleSort( freq_tabls,  256);
    for ( i = 0; i < 256; i++ )
    {
        if ( freq_tabls[ i ].count == 0 ) {
            break; // т.к. массив отсортирован, то после первого нуля все остальные д.б. тоже нули
        }
        printf( "Cимвол '%c'. Он встречался %d раз\n", freq_tabls[i].sim, freq_tabls[i].count );
    }
}