C++ Сортировать массив по количеству повторяющихся элементов
Сортировать массив по количеству повторяющихся элементов. Значение элемента не важно.
Например: до 3 0 5 1 0 0 3 3 5 3 1 после 3 3 3 3 0 0 0 5 5 1 1
Мой код (часть другого кода поэтому переменные не инициализированы) Я создал 2 массива в одном единичные экземпляры элементов в другом количество этих элементов соответственно, но ничего не получилось -(-_-)/-
sort(mas_dbl,mas_dbl+m); \\ что-бы сгруппировать числа вместе (1 2 0 0 6 1)--->(0 0 1 1 2 6)
for(int i=0; i<s; i++)
{
cout<<mas_dbl[i]<<" ";
}
cout<<endl;cout<<endl;
int d=0;
int f[s];
for(int i=0; i<s; i++)
{
f[i]=0;
}
int p=0;
int temp;
for(int i=0; i<s; i++)
{
if ((mas_dbl[i])==(mas_dbl[i+1])){p++;}
else{ f[d]=p+1;d++;p=0;}}
for(int i=0; i<d; i++)
{
cout<<f[i];
}
cout<<endl;cout<<endl;
int v=0;
for(int i=0; i<d; i++)
{
if ((mas_dbl[i])!=(mas_dbl[i+1]))
{v++;}
}
int mas_dbl2[v+1];
int y=1;
mas_dbl2[0]=mas_dbl[0];
for(int i=1; i<s; i++)
{
if ((mas_dbl[i])!=(mas_dbl[i+1]))
{ mas_dbl2[y]=mas_dbl[i+1];y++;}
}
for(int j=0; j<v+1; j++)
{
cout<<mas_dbl2[j]<<" ";
}
int t=0;
for(int i=0; i<d; i++)
{
if (f[i]<f[i+1])
{temp=f[i+1]; f[i+1]=f[i]; f[i]=temp;
temp=mas_dbl2[i+1];
mas_dbl2[i+1]=mas_dbl2[i];
mas_dbl2[i]=temp;}
}
for(int i=0; i<d; i++)
for(int j=0; j<f[i]; j++)
{
cout<<mas_dbl2[t];t++;
}
cout<<endl;cout<<endl;
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
А обязательно все вручную? Раз сортируете стандартным алгоритмом - допускаю, что и стандартные контейнеры можно использовать... Тогда можно, например, так:
int main()
{
map<int,int> m;
multimap<int,int,greater<int>> mm;
for(int i = 0; i < 40; ++i)
{
int v = rand()%20;
m[v]++;
cout << v << " ";
}
cout << endl;
for(auto v : m)
mm.insert(make_pair(v.second,v.first));
for(auto v : mm)
for(int i = 0; i < v.first; ++i)
cout << v.second << " ";
cout << endl;
}