Sortowanie bąbelkowe

0

Witam, czy mógłby mi ktoś pomóc znaleźć błąd w tym sortowaniu?

 
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
double tablica[10];
int i, k;



for (i=0; i<10; i++)
do {
 printf("\n Podaj liczbe [%d]=", i);
 k=scanf("%lf", &tablica[i]);
 fflush(stdin);
} while (k==0);


int zam;

do {
zam=0;
for (i=0;i<i-1;i++);
if (tablica[i+1]<tablica[i]);
{
double p=tablica[i];
tablica[i]=tablica[i+1];
tablica[i-1]=p; zam=1;
}
}while (zam==0);

for (i=0;i<10;i++){
printf("%lf \t",tablica[i]);
}





 system("PAUSE");
 return EXIT_SUCCESS;
}
0

po for masz ; a nie powinno być

0

Jak zaczniesz pisać kod w jakimś porządnych edytorze a nie za pomocą lodówki, to auto-formatowanie kodu rozwiąże takie problemy...

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    double tablica[10];
    int i, k;
    for (i=0; i<10; i++)
        do
        {
            printf("\n Podaj liczbe [%d]=", i);
            k=scanf("%lf", &tablica[i]);
            fflush(stdin);
        }
        while (k==0);
    int zam;
    do
    {
        zam=0;
        for (i=0; i<i-1; i++); //od razu widać że "if" jest źle zagnieżdżony
        if (tablica[i+1]<tablica[i]);
        {
            double p=tablica[i];
            tablica[i]=tablica[i+1];
            tablica[i-1]=p;
            zam=1;
        }
    }
    while (zam==0);
    for (i=0; i<10; i++)
    {
        printf("%lf \t",tablica[i]);
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

Podstawowe bledy

Jesli sprawdzsz czy element nastepny jest mniejszy od aktualnego to potem zamieniaj je poprawnie

        if (tablica[i+1]<tablica[i]);
        {
            double p=tablica[i];
            tablica[i]=tablica[i+1]; // ZAMIEN I Z I+1 A NIE I-1 TRACISZ TUTAJ DANE
            tablica[i-1]=p;
            zam=1;
        }

Kolejna rzecz nieprzemyslana

do
...
while(zm==0)

Teraz jesli nastapi zmiana elementow to zmieniasz zm=1 a potem while sprawdza czy zm==0 i wychodzi z niego gdyz nie jest! Powinna wychodzic wtedy kiedy zm==0 czyli nie bylo juz zadnej zmiany.

1
  for (i=0; i<i-1; i++);

i< i-1 ?
Proponuję zainstalować dobre IDE i zapoznać się z debuggerem.

0

No nawet nie spojrzalem na to. Ten warunek jest kompletnie bez sensu xD

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