Я пытаюсь создать программу на C, которая удаляет повторяющиеся значения в целочисленном массиве. Моя стратегия состоит в том, чтобы сначала отсортировать массив с помощью функции selectionsort, а затем вызвать функцию removeup, которая удаляет любые последовательные, повторяющиеся значения в массиве.удаление повторяющихся значений из массива в C
Мой код:
#include <stdio.h>
#include "simpio.h"
#define n 10
void GetArray(int a[]);
void SelectionSort(int a[]);
int FindMax(int a[], int high);
void swap(int a[], int p1, int p2);
int removedup(int a[]);
void printArray(int a[]);
main()
{
int a[n];
GetArray(a);
SelectionSort(a);
printf("The original, sorted array is\n");
printArray(a);
printf("The array with removed duplicates \n");
printArray(removedup(a));
getchar();
}
void GetArray(int a[])
{
int i;
for(i=0;i<n;i++)
{
printf("Enter integer# %d", i+1);
a[i]=GetInteger();
}
}
void SelectionSort(int a[])
{
int i, max;
for(i=0;i<n;i++)
{
max=FindMax(a,n-i-1);
swap(a,max,n-i-1);
}
}
int FindMax(int a[], int high)
{
int i, index;
index=high;
for(i=0;i<high;i++)
{
if(a[i]>a[index])
index=i;
}
return index;
}
void swap(int a[], int p1, int p2)
{
int temp;
temp=a[p2];
a[p2]=a[p1];
a[p1]=temp;
}
int removedup(int a[])
{
int i, count, OutArray[count], j;
count=0;
for(i=0;i<n-1;i++)
{
if(a[i]==a[i+1])
{
a[i+1]=a[i+2];
count++;
}
}
count++;
for(j=0;j<count;j++)
{
OutArray[i]=a[i];
}
return OutArray;
}
У меня есть два вопроса:
1) Как исправить ошибку компилятор в предоставлении мне в главном корпусе при вызове removedup внутри PrintArray функции, говоря " неверное преобразование из int в int * "? (строка 22)
2) Как точно определить размер OutArray [] в функции removeup? В настоящее время я определяю его как переменную размера, но значение этой переменной точно не определено до объявления OutArray.
Вы можете сделать это быстрее в O (n), кстати – BlackBear
Прочтите [comp.lang.c FAQ] (http://c-faq.com/), начиная с раздела 6. – pmg