求数组元素出现次数-C描述
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
typedef struct {
int num;
int count;
} NumberSet;
void exchange(int *p1 ,int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//① 数据进行排序
//② 取数组第一枚元素 加入集合体中
// 遍历数组
// =>元素一致 次数增加
// =>不一致,那么就是不同元素,加入到集合体中
//③ 对集合元素进行排序,根据最多次数排列
#define N 10
void main() {
int a[N] = { 0 };
time_t ts;
unsigned int seed = time(&ts);
srand(seed);
for (int i = 0; i < N; i++)
{
a[i] = rand() % N;
printf("%3d", a[i]);
}
printf("\n");
//① 数据进行排序
for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j < N - i - 1; j++)
{
if (a[j] > a[j + 1]) {
exchange(&a[j], &a[j + 1]);
/* int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;*/
}
}
}
NumberSet set[N] = { 0 };
printf("\n");
for (int i = 0; i < N; i++)
{
printf("%3d", a[i]);
}
printf("\n");
//② 取数组第一枚元素 加入集合体中
int u = 0;
set[u].num = a[0];
set[u].count = 1;
// 遍历数组
// =>元素一致 次数增加
// =>不一致,那么就是不同元素,加入到集合体中
for (int i = 1; i < N; i++)
{
if (set[u].num == a[i])
set[u].count++;
else {
u++;
set[u].num = a[i];
set[u].count = 1;
}
}
printf("\n");
for (int i = 0; i <= u; i++)
{
printf("num = %d count = %d \n", set[i].num, set[i].count);
}
printf("\n");
//③ 对集合元素进行排序,根据最多次数排列
for (int i = 0; i < u; i++)
{
for (int j = 0; j < u - i; j++)
{
if (set[j].count > set[j + 1].count)
{
exchange(&set[j].count, &set[j + 1].count);
/* int temp = set[j].count;
set[j].count = set[j + 1].count;
set[j + 1].count = temp;*/
exchange(&set[j].num, &set[j + 1].num);
/* temp = set[j].num;
set[j].num = set[j + 1].num;
set[j + 1].num = temp;*/
}
}
}
for (int i = 0; i <= u; i++)
{
printf("num = %d count = %d \n", set[i].num, set[i].count);
}
getchar();
}