Witam,
Postanowiłem w ramach treningu napisać sobie program, który będzie za każdym razem wybierał najmniejszą liczbę w tablicy, usuwał ją i zapisywał jej adres w drugiej tablicy wskaźników w kolejności rosnącej od 0. Na końcu zaś planowałem wyświetlić posortowaną listę liczb za pomocą wskaźników. Mam taki kod:
int main() {
int numbers[10] = {21, 42, 1, 32, 44, 17, 25, 33, 98, 76};
int *pointers[10];
int i, min, key, tmp, j;
int count = 10;
int sorted = 0;
for (j=0; j<10; j++) {
min = numbers[sorted];
for (i=sorted; i<count; i++) {
if (numbers[i]<min) {
min = numbers[i];
key = i;
}
}
tmp = numbers[count-1];
numbers[count-1] = min;
numbers[key] = tmp;
pointers[sorted] = &numbers[count-1];
count--;
sorted++;
}
for (i=0; i<10; i++) {
printf("%d. %d\n", i+1, *pointers[i]);
}
getch();
return 0;
}
Jednak nie wiem dlaczego, ale jest on niepoprawny. Ogólnie chodziło mi o to, że 10 razy (pętla for ze zmienną j) wybieram minimum z tablicy, usuwam daną liczbę z tej tablicy (zamieniam ją z ostatnią i w kolejnej pętli liczę już bez tego ostatniego indeksu) i zapisuje jej adres w drugiej tablicy wskaźników.
Program się oczywiście kompiluje, ale nie spełnia swojej roli. Co jest nie tak?