Sortowanie bąbelkowe w C

0

Mógłby ktoś mnie naprowadzić, gdzie jest błąd? Program sortuje, ale nie wyświetla mi najmniejszej liczby.

#include <stdio.h>
int a[4], i=0, j=0, t;

int main(void)
{    
    for(i; i<5; i++){
    printf("Podaj liczbe: ");
    scanf("%d", &a[i]);
    }
    for(i=0; i<5; i++) printf("%d\n", a[i]);
    
    for(j; j<5; j++){
    for(i=0; i<5; i++){
             if(a[i]>a[i+1]){
                             t=a[i];
                             a[i]=a[i+1];
                             a[i+1]=t;
                             }
                      }
                      }
    
    printf("\nPosortowane:\n");  
    for(i=0; i<5; i++) printf("%d\n", a[i]);
system("PAUSE");
}
0

bo wchodzisz do tablicy a[4]? a nie ma takej w tej tablicy musisz miec a[5]

0

Źle sortujesz. Zobacz do jakich elementów się odwołujesz gdy i=4 odwołujesz się do i+1 przy czym tworzysz tablice a[5], której elementy są numerowane od 0..4

0
marseel napisał(a)

Źle sortujesz. Zobacz do jakich elementów się odwołujesz gdy i=4 odwołujesz się do i+1 przy czym tworzysz tablice a[5], której elementy są numerowane od 0..4

for(j; j<5; j++){
    for(i=0; i<4; i++){
             if(a[i]>a[i+1]){
                             t=a[i];
                             a[i]=a[i+1];
                             a[i+1]=t;
                             }
                      }
                      }

możesz rozwinąć zdanie "Źle sortujesz"? :)

Zmieniając deklaracje tablicy na a[5] tak jak pisał Gelldur sortowanie działa..
I teraz mam pytanie. Czy deklarując tablice a[50] i dla i=50 otrzymuje wartość z tablicy a[50] czy taka tablica nie istnieje?

0

Jeżeli zostawiłeś rozmiar tablicy dalej na 4 to jest źle. A chodziło mi o to, że odwoływałeś się poza zakres.

0
#include <stdio.h>
int a[5], i=0, j=0, t;

int main(void)
{    
    for(i; i<5; i++){
    printf("Podaj liczbe: ");
    scanf("%d", &a[i]);
    }
    for(i=0; i<5; i++) printf("%d\n", a[i]);
    
    for(j; j<5; j++){
    for(i=0; i<4; i++){
             if(a[i]>a[i+1]){
                             t=a[i];
                             a[i]=a[i+1];
                             a[i+1]=t;
                             }
                      }
                      }
    
    printf("\nPosortowane:\n");  
    for(i=0; i<5; i++) printf("%d\n", a[i]);
system("PAUSE");
}

Zmieniając deklaracje tablicy na a[5] tak jak pisał Gelldur sortowanie działa..
I teraz mam pytanie. Czy deklarując tablice a[50] i dla i=50 otrzymuje wartość z tablicy a[50] czy taka tablica nie istnieje?

a dokładnie to chodzi mi o tą linijkę int a[5], i=0, j=0, t; tutaj deklaruje że tablica ma 5 elementów czy 6 (bo w c liczymy od zera)

0

Taka komórka nie istnieje.
int tablica[50] znaczy że tworzysz tablicę która ma 50 elementów.
Numeracja idzie od 0 więc indeksy są od 0 do 49.

0
Shalom napisał(a)

int tablica[50] znaczy że tworzysz tablicę która ma 50 elementów.
Numeracja idzie od 0 więc indeksy są od 0 do 49.

Czyli rozumiem, że gdy mamy int tablica[50] to dopiero wtedy gdy odwołujemy się do tablicy to liczmy od zera do n-1?

0

tak

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