Найти количество повторений каждого элемента массива, используя указатели - C (СИ)
Формулировка задачи:
Помогите пожалуйста, нужно найти количество повторений каждого елемента масива на языке си
Решение задачи: «Найти количество повторений каждого элемента массива, используя указатели»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b){
return *(int*)a - *(int*)b;
}
int main(void){
int* p, *i, *e;
int a[] = { 7, 1, 2, 1, 3, 2, 1, 1, 2, 7, 2, 1, 3, 4, 2, 3, 3, 1 };
int n = sizeof(a)/sizeof(a[0]);
qsort(a, n, sizeof(a[0]), &compare);
for(p = &a[0], e = &a[n]; p != e; p = i){
i = p + 1;
while((i != e) && (*i == *p))
++i;
printf("%d(%d)\n", *p, (int)(i - p));
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Создаем функцию сортировки массива, используя функцию qsort() и сравнивая элементы по значению
- В функции main() выделяем указатель на первый элемент массива и определяем размер массива
- Сортируем массив, используя функцию qsort() и передавая ей указатель на начало массива, размер массива и функцию сравнения
- Используем цикл для прохода по отсортированному массиву и подсчета повторений каждого элемента
- Выводим количество повторений каждого элемента на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась