[C] Sortowanie szybkie.

pkol
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 7 paź 2016, o 22:38
Płeć: Mężczyzna
Lokalizacja: Ostrów Wielkopolski
Podziękował: 4 razy

[C] Sortowanie szybkie.

Post autor: pkol »

Witam, mam problem z napisaniem kodu na sortowanie szybkie, otóż nie wiem jak zadeklarować tablicę w funkcji, aby program mi działał, bo kompilator zwraca mi uwagę że nie widzi w ogóle tej tablicy wewnątrz funkcji.

Kod: Zaznacz cały

#include <stdio.h>

void swap(int *a, int *b)
{
	int temp = *a;
	
	*a = *b;
	*b = temp;
}
void sort(int l, int p)
{
	int piwot=p-(p-l)/2;
	int i,j;
	
	swap(&tab[piwot],&tab[p]);
	
	for(j=i=0;i<p;i=i+1)
	{
		if(tab[i]<piwot)
		{
			swap(&tab[i],&tab[j]);
			j=j+1;
		}
	}
	
	swap(&tab[j],&tab[p]);
	
	if(l<j-1)
		sort(l,j-1);

	if(j+1<p)
		sort(j+1,p);
}
int main()
{
	int tab[10]={9,8,7,6,5,4,3,2,1,-1};
	sort(tab[0],tab[9]);
	
	for(int a=0;a<10;a=a+1)
	{
		if(a==0)
			printf("
");

		printf("%d ",tab[a]);
	}
	return 0;
}
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Sortowanie szybkie.

Post autor: kalwi »

Nie widzi, bo niby skąd ma widzieć? Poczytaj sobie o zasięgu zmiennych.

Zamiast robić jakieś cuda z tymi p i l, to po prostu:

Kod: Zaznacz cały

void sort(int *tab)
i w mainie

Kod: Zaznacz cały

   sort(tab);
pkol
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 7 paź 2016, o 22:38
Płeć: Mężczyzna
Lokalizacja: Ostrów Wielkopolski
Podziękował: 4 razy

[C] Sortowanie szybkie.

Post autor: pkol »

No okej, ale potem, jeśli zaczyna się wywołanie rekurencyjne, to nie weźmie mi całej długości tablicy znowu? Powinno już wtedy podzielić sortowanie na mniejsze i większe od piwota.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Sortowanie szybkie.

Post autor: kalwi »

No to co to za problem zrobić

Kod: Zaznacz cały

void sort(int l, int p, int *tab)
ODPOWIEDZ