Wybieranie kolejno najmniejszej liczby i kopiowanie do tablicy wskaźników

0

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?

0

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.
hyyh, a nie można by posortować tej tablicy jakimś lepszym algorytmem? ;-)

poza tym, skoro chcesz usuwać liczbę z tablicy, to nie zamieniaj z ostatnim elementem, tylko po prostu nadpisz ostatnim elementem i zmniejsz count. zapisywanie wartości na koniec tylko po to żebyś tam więcej już nie spojrzał to strata czasu.

jaką wartośc początkową ma u ciebie key?

0

Count na początku ma 10, ale w pętli używam warunku "<", więc ogólnie idziemy aż do numbers[9], potem numbers[8] itd... Algorytm sortowania rzeczywiście głupi, ale tak chciałem sobie poćwiczyć :) Zaraz spróbuję zmienić to, o czym mówisz i zobaczymy, co z tego wyjdzie :) Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0