[Ansi C] Problem z sortowaniem przez wybieranie

0

Witam, napisałem takie sortowanie:

#include <stdio.h>

void wpisz_do_tablicy(int tab[], int n);
void odczytaj_tablice(int tab[], int n); 
void sortowanie_przez_wybor(int tab[],int n);
/******************************************************************************/
int main()
{
    int n; // - liczba elementow w tablicy
    
    printf("Podaj ilosc elementow do posortowania: ");
    scanf("%d", &n);
    int tab[n]; // - tablica n elementowa
    
    wpisz_do_tablicy(tab, n); // - funkcja uzupelnia tablice
    
    printf("\n---------- ----- -----\n");
    printf("SORTOWANIE PRZEZ WYBOR");
    printf("\n---------- ----- -----\n");
    
    sortowanie_przez_wybor(tab, n); // - funkcja wykonujaca sortowanie
    
    odczytaj_tablice(tab, n); // - funkcja odczytujaca zawartosc tablicy
    getch();
    return 0;    
}
/******************************************************************************/
void wpisz_do_tablicy(int tab[], int n)
{
       int i;
       for(i = 0; i < n; i++)
       {
             printf("Podaj %d element: ", i+1);
             scanf("%d", &tab[i]);      
       }   
}
/******************************************************************************/
void odczytaj_tablice(int tab[], int n)
{
       int i;
       for(i = 0; i < n; i++) printf("Element %d: %d\n", i+1, tab[i]);
}
/******************************************************************************/
void sortowanie_przez_wybor(int tab[],int n)
{
       int j = 0, i = 0;
       int minimalny = 0, pojemnik = 0;
       
       for(j; j < n; j++)
       {
            for(i; i < n; i++) if(tab[minimalny] > tab[i]) minimalny = i;   
            
            if(tab[j] != tab[minimalny])
            {
                pojemnik = tab[j];
                tab[j] = tab[minimalny];
                tab[minimalny] = pojemnik;
            }
            
            i = j + 1;                     
       }   
}
/******************************************************************************/

Niestety nie działa poprawnie, nie wszystkie elementy są posortowane. Pomóżcie, co tu jest źle ?

0

Nie ustawiasz za każdym razem wartosci zmiennej "minimalny" !!
Pomyśl logicznie co ty robisz ;]
wybierasz minimalny indeks za pierwszym razem a potem za kazdym razem porównujesz wszystko z tą wartością którą tam wstawisz ;]
No i nie rozumiem czemu nie korzystasz z petli for tak jak powinieneś...

void sortowanie_przez_wybor(int tab[],int n)
{
  int i,j; //iteratory pętli
  int minimalny; //indeks minimalnego
  int pojemnik = 0; //zmienna pomocnicza do swapa

  for (j = 0; j < n; j++)
    {
      minimalny = j; //zakładamy że minimum jest aktualnie analizowany element
      for (i = j+1; i < n; i++) //idziemy od następnego el do końca tablicy
        if (tab[minimalny] > tab[i])
          minimalny = i;

      if (tab[j] != tab[minimalny]) //swap
        {
          pojemnik = tab[j];
          tab[j] = tab[minimalny];
          tab[minimalny] = pojemnik;
        }
    }
}
0

Dzięki za pomoc :-)

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