Здравствуйте, я сейчас застрял в проблеме домашних заданий, так как я понятия не имею, как точно подойти к проблеме.Подсчет частоты элементов в массиве
Напишите программу, которая читает в списке целых чисел в массив с базовым типом int. Предоставьте возможность либо считывать этот массив с клавиатуры, либо из файла по выбору пользователя. Если пользователь выбирает ввод файла, программа должна запрашивать имя файла. Вы можете предположить, что в массиве содержится менее 50 записей. Ваша программа определяет количество записей. Вывод должен состоять из двух столбцов. Первый столбец представляет собой список отдельных элементов массива ; второй столбец - это счетчик числа вхождений каждого элемента. Список следует сортировать по записям в первом столбце , от самого большого до наименьшего.
Так что я войду: 1, 2, 1, 10, 15, 12, 2, 10, 10 Программа должна вывести что-то вроде:
Список частот
1 ---- -2
2 ----- 2
10 ---- 3
15 ---- 1
Я могу сортировать числа, но не знаю, как бы я хотел сравнивать числа в массиве.
#include <iostream>//Input/Output Library
#include <cstdlib>
#include <iomanip>
using namespace std;//Namespace of the System Libraries
//Global Constants
const int MAX = 10;
//Function Prototypes
void input(int array[], int size);
void sort(int array[],int size);
int main(int argc, char** argv){
//Declare Variable
int array[MAX];
int size = MAX;
//Input Data
input(array, size);
sort(array, size);
cout<<"\nSort Frequency\n";
for(int i = 0; i<size; i++){
cout<<array[i]<<endl;
}
return 0;
}
void input(int a[], int size){
cout<<"Enter "<<size<<" numbers for the array: \n";
for(int i=0; i<size; i++){
cin>>a[i];
}
}
void sort(int a[],int n){
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[i]>a[j]){
a[i]=a[i]^a[j];
a[j]=a[i]^a[j];
a[i]=a[i]^a[j];
}
}
}
}
Я бы использовал 'std :: map ', а не массив. Для каждого входа наберите счетчик для соответствующей записи карты. Когда закончите с вводом, перечислите карту с помощью 'crbegin', чтобы« crend »iterator и сбросить результаты. Это буквально около 14 строк кода, включая список «# include» и пробелы для чтения. И fyi, * никто * не использует xor-swapping в реальном мире для такой тривиальной задачи. –
WhozCraig
Знаете ли вы, какой диапазон номеров? Потому что, если это (например) цифры от 0 до 1000, есть простой ответ: просто используйте https://en.wikipedia.org/wiki/Counting_sort и замените их обратно, распечатав их. Но если это может быть любое число, которое можно сохранить, то это сложнее: вам нужно использовать карту, но карта на самом деле не массив, поэтому она не может быть разрешена. –