如何写一子函数 删除一维数组中相同的元素
编写一个程序 1:删除一维数组中所有相同的元素,使之只剩一个2:数组中的数按照从小到大排列
3:函数返回值为删除相同的数后数组中数据的个数
还有一个问题,我一直不懂返回值是干嘛的?
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define LEN 26
struct foobar {
int n;
int c;
};
int new_arr[LEN];
void sort_arr(int *p, int i) {
int j, k, t = 0;
i--;
for(j = 0; j < i; j++) {
for(k = 0; k < (i - j); k++) {
if(*(p + k) > *(p + k + 1)) {
t = *(p + k);
*(p + k) = *(p + k + 1);
*(p + k + 1) = t;
}
}
}
}
int foo(struct foobar *cnt, int *old_arr) {
int i, j, k=0;
for(i = 1; i < LEN; i++) {
for(j = 0; j < i; j++) {
if(cnt[j].n == old_arr[i]) {
cnt[j].c++;
break;
}
}
cnt[j].n = old_arr[i];
cnt[j].c = 1;
}
for(i = 0; i < LEN; i++) {
if(cnt[i].c != 0) {
new_arr[k] = cnt[i].n;
k++;
}
}
sort_arr(new_arr, k);
return k;
}
int main(void) {
int old_arr[LEN]={0};
struct foobar cnt[LEN];
int i = 0, len = 0;
srand((unsigned int)time(NULL));
printf("\nOLD_ARR_LEN = %d\n", LEN);
for(i = 0; i < LEN; i++) {
old_arr[i] = 1 + (int)(15.0 * rand() / (RAND_MAX + 1.0));
printf("%d ", old_arr[i]);
cnt[i].c = 0;
}
printf("\n");
cnt[0].n = old_arr[0];
cnt[0].c = 1;
len = foo(cnt, old_arr);
printf("\nNEW_ARR_LEN = %d\n", len);
for(i = 0; i < len; i++) {
printf("%d ", new_arr[i]);
}
printf("\n");
return 0;
}
