Sortowanie tablicy w C

0

Witam. Program wypisuje lecz nie posortowane liczby. Chciałabym aby funkcja sortująca była w main i na razie bez uzycia wskaźników

#include <stdio.h>

int main (void)
{
	int tab[10];
	
		printf("Podaj wartości tablicy od 1 do 10\n");
	for(int i =0;i<10;i++)
	{
			printf("Podaj wartosc %d = ",i);
			scanf("%d",&tab[i]);
			printf("Tab od [%d]=%d\n",i,tab[i]);
			
				
	}
	
	for(int i=0;i<10;i++)
	 {
	 	int temp;
	 	if(tab[i]>tab[i+1])
	    {
		tab[i]=temp;
	    tab[i+1]=temp;
	    tab[i]=tab[i+1];
	    
	    	printf("posortowane liczby: ");
	 	for(i=0;i<10;i++)
	 	{
	 		printf("%d, ",tab[i]);
		 }
	 
	}
	 
	 }

	return 0;
}
0

Program może zrobić wszystko, bo jest w UB. Wyjście poza zakres tablicy.

http://cpp0x.pl/kursy/Algorytmy/442

0

Da się to jakoś poprawić, żeby nie wychodzić z funckją void poza main?

0

Zmieniłam program, powinien działać jednak wychodzą dwa błędy, których nie rozumiem.

#include <stdio.h>

void zamien(int tab[], int rozmiar)
{
	int i,j, temp;
	rozmiar=10;
	for( i=0; i<rozmiar -1;i++)
	 for(j=i+1; j<10;j++ )
	 {
	 	tab[i]=temp;
	 	tab[i]=tab[j];
		 tab[j]=temp;
	 	
	 }
}

int main (void)
{
	int tab[10];
	printf("Podaj wartosci tablicy 10 el. \n");
	for(int i=0; i<10;i++)
	{
	
	scanf("%d", &tab[i]);
}

	printf("Tablica przed sertowaniem: \n");
	for(int i=0; i<10 ; i++)
	printf("%d", tab[i]);
	
	zamien(tab,10);
	
	printf("Tablica po sortowaniu: \n");
	printf("%d", tab[i]);
	
	return 0;
}

Jak myślisz?

0

Napisz nam jakie to błędy. Będzie szybciej. ;)

0
#include <stdio.h>

void zamien(int tab[], int rozmiar)
{
    int i,j, temp;
    rozmiar = 10;
    for (i=0; i<rozmiar -1;i++) {
         for(j=i+1; j<10;j++ ) {
            temp = tab[i];
            tab[i]=tab[j];
            tab[j]=temp;

        }
    }
}

int main (void)
{
    int tab[10];
    printf("Podaj wartosci tablicy 10 el. \n");
    for(int i = 0; i < 10; i++)
    {
        scanf("%d", &tab[i]);
    }

    printf("Tablica przed sertowaniem: \n");
    for(int i = 0; i < 10; i++)
        printf("%d", tab[i]);

    zamien(tab,10);

    printf("Tablica po sortowaniu: \n");
    for(int i = 0; i < 10 ;i++)
        printf("%d", tab[i]);

    return 0;
}

Powinno być czytelniej. Algorytm sortowania jest zrealizowany błędnie. Jeżeli to ma być bubble sort, to:

do {
	for (int i = 0; i < size; i++) {
		if (tab[i] > tab[i+i]) {
			temp = tab[i];
            tab[i] = tab[i + 1];
            tab[i + 1] = temp;
        }
    }
    size--;
} while (size > 1);

Oczywiście nie wszystkie zmienne pokrywają się z Twoimi. ;)

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