从数组删除重复项用c语言,使用C 从数组中删除重复项

您不能轻易地在C中调整数组 – 至少不是数组,因为您已经声明了数组.显然,如果数据按排序顺序,则可以直接将数据复制到分配的数组的前面,并将其视为正确的较小尺寸(并且它是线性O(n)算法) .如果数据没有排序,它会变得更加混乱;平凡的算法是二次的,所以可能排序(O(N lg N))后跟线性算法最好.

您可以使用动态分配的内存来管理阵列.不过,这可能超出了你在学习中所达到的水平.

#include

#include

#include

static int intcmp(const void *pa, const void *pb)

{

int a = *(int *)pa;

int b = *(int *)pb;

if (a > b)

return +1;

else if (a < b)

return -1;

else

return 0;

}

static int compact(int *array, int size)

{

int i;

int last = 0;

assert(size >= 0);

if (size <= 0)

return size;

for (i = 1; i < size; i++)

{

if (array[i] != array[last])

array[++last] = array[i];

}

return(last + 1);

}

static void print(int *array, int size, const char *tag, const char *name)

{

int i;

printf("%s\n", tag);

for (i = 0; i < size; i++)

printf("%s[%d] = %d\n", name, i, array[i]);

}

int main(void)

{

int a[11] = {1,2,3,4,5,11,11,11,11,16,16};

int a_size = sizeof(a) / sizeof(a[0]);

print(a, a_size, "Before", "a");

a_size = compact(a, a_size);

print(a, a_size, "After", "a");

int b[11] = {11,1,11,3,16,2,5,11,4,11,16};

int b_size = sizeof(b) / sizeof(b[0]);

print(b, b_size, "Before", "b");

qsort(b, b_size, sizeof(b[0]), intcmp);

print(b, b_size, "Sorted", "b");

b_size = compact(b, b_size);

print(b, b_size, "After", "b");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值