Удаление дубликатов в массиве - PullRequest
1 голос
/ 03 октября 2010

Я создал программу для удаления дубликатов в массиве, но условие программы всегда остается верным. Я понял, в чем проблема, изменил arr [i] на arr [count] и выделил память через malloc, но программа печатает массив без изменений, не удаляя дубликаты.

    # include<stdio.h>
    # include<stdlib.h>
    int count=0;
    void Delete(int *arr);
    void Search(int *arr);

    int main()
    {
    int i;
    int *arr;
    arr=(int*)malloc(sizeof(int));
    clrscr();
    printf("Enter array and press -1 to stop:\n");/*stops when -1 occurs*/
    for(count=0;    ;count++)/*count is the count of the numbers*/
    {
        scanf("%d",&arr[count]);
        realloc(arr,sizeof((int)+count));
        fflush(stdin);
        if(*(arr+count)==-1)/*This condition is never true.*/
        break;
    }
    Search(arr);
    for(i=0;i<count;i++)
    {
        printf("%d\t",arr[i]);
    }
    getch();
    return 0;
}

    Search(arr);
    for(i=0;i<count;i++)
    {
        printf("%d",&arr[i]);
    }
    getch();
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Чтобы удалить дубликаты из массива, создайте метод, который:

  • сортирует массив
  • считает уникальные значения
  • создает новый массив, который имеет размеруникальные значения
  • начинают копирование из одного массива в другой, когда их значения различаются

Чтобы использовать быструю сортировку в c, вам нужна функция сравнения, такая как:

int comp(const void *x, const void *y) {
  return (*(int*)x - *(int*)y);
}

И затем вы можете вызвать его с помощью:

qsort(array, 10, sizeof(int), comp);

Чтобы подсчитать уникальные элементы в отсортированном массиве, выполните итерацию по массиву и выполните что-то вроде:

if(sortedarray[i]!=sortedarray[i+1]) count++;
1 голос
/ 03 октября 2010

Вы никогда не инициализировали обр.В настоящее время это просто указатель, он не имеет реальной границы, поэтому вы можете перезаписать что-то еще.

Кроме того, вы никогда не увеличиваете scanf ("% d", & arr [i]);Я думаю, что вы хотите, чтобы читать scanf ("% d", & arr [counter]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...