Sortowanie w C

0

Witam! Mam problem z sortowaniem przez wybieranie, otóż program nie sortuje liczb.

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

int *alokuj(int ilosc)									//Funckja alkouje dynamicznie pamięć
{
	int *tablica = (int *)malloc(ilosc*sizeof(int));
	return tablica;
}
void wczytaj(int ilosc, int *tablica)
{
	int i;
	for (i = 0; i < ilosc; i++)
		scanf("%i", &tablica[i]);
}
int maxind(int ilosc, int *tablica)						//Funckja zwraca indeks największego elementu
{
	int k = NULL, i;
	for (i = 1; i < ilosc; i++)
	{
		if (tablica[i]>tablica[k]) k = i;
	}
	return k;
}
void sort(int ilosc, int *tablica)						//Funkcja sortuje przez wybieranie
{
	int k, i, x;
	for (i = 0; i < ilosc-1; i++)
	{
		k = maxind(ilosc - 1, tablica);
		x = tablica[ilosc - i - 1];
		tablica[ilosc - i - 1] = tablica[k];
		tablica[k] = x;
	}
}
void wypisz(int ilosc, int *tablica)
{
	for (int i = 0; i < ilosc; i++)
		printf("%i\n", tablica[i]);
}
void main()
{
	unsigned int n = NULL;
	int *liczby;
	char q;
	printf("Ile liczby chcesz podac?: "); scanf("%i", &n);
	liczby = alokuj(n);
	printf("Podaj %i liczb:\n", n);
	wczytaj(n, liczby);
	sort(n, liczby);
	printf("\nPosortowane elementy tablicy:\n");
	wypisz(n, liczby);
	system("pause");
}
2
 
int maxind(int ilosc, int *tablica, int index)         
{
    int k = index, i;
    for (i = index + 1; i < ilosc; i++)
    {
        if (tablica[i]>tablica[k]) k = i;
    }
    return k;
}

void sort(int ilosc, int *tablica)                        
{
    int k, i, x;
    for (i = 0; i < ilosc-1; i++)
    {
        k = maxind(ilosc, tablica, i);
        x = tablica[i];
        tablica[i] = tablica[k];
        tablica[k] = x;
    }
}
0

A dziekuje teraz działa. A mam jeszcze jeden problem, otóż chciałbym dodać możliwość pobrania liczb z pliku. Zacząłem od napisania funckji odczyt, ale utknąłem w połowie (czy też może w 1/4) i nie wiem co dalej napisać. Dlatego bym był wdzięczny gdyby jakaś dobra dusza pomogła mi napisać tą funkcję i wytłumaczyła kwestie odczytu z pliku.

#include<stdio.h>
#include<stdlib.h>
#define MAX 250

int *alokuj(int ilosc)									//Funckja alkouje dynamicznie pamięć
{
	int *tablica = (int *)malloc(ilosc*sizeof(int));
	return tablica;
}
void wczytaj(int ilosc, int *tablica)
{
	int i;
	for (i = 0; i < ilosc; i++)
		scanf("%i", &tablica[i]);
}
void odczyt(int *tablica)
{
	FILE *plik;
	int x;
	char sciezka[MAX];
	printf("Podaj sciezke do istnejacego pliku: "); scanf("%s", &sciezka);
	plik = fopen(sciezka, "r");

}
int maxind(int ilosc, int *tablica, int index)			//Funckja zwraca indeks największego elementu
{
	int k = index, i;
	for (i = index + 1; i < ilosc; i++)
	{
		if (tablica[i]>tablica[k]) k = i;
	}
	return k;
}
void sortuj(int ilosc, int *tablica)					//Funkcja sortuje przez wybieranie
{
	int k, i, x;
	for (i = 0; i < ilosc - 1; i++)
	{
		k = maxind(ilosc, tablica, i);
		x = tablica[i];
		tablica[i] = tablica[k];
		tablica[k] = x;
	}
}
void wypisz(int ilosc, int *tablica)
{
	for (int i = 0; i < ilosc; i++)
		printf("%i\n", tablica[i]);
}
void zapis(int ilosc, int *tablica)
{
	FILE *plik;
	char sciezka[MAX];
	printf("Podaj sciezke do zapisu: "); scanf("%s", &sciezka);
	plik = fopen(sciezka, "w");
	for (int i = 0; i < ilosc; i++)
		fprintf(plik, "%i\n", tablica[i]);
	fclose(plik);
}
void main()
{
	unsigned int n = NULL;
	int *liczby;
	char q, w;
	printf("Ile liczby chcesz podac?: "); scanf("%i", &n);
	liczby = alokuj(n);
	getchar();
	printf("Czy chcesz pobrac elementy z tablicy? "); scanf("%c", &q);
	if (q != 't')
	{
		printf("Podaj %i liczb:\n", n);
		wczytaj(n, liczby);
	}
	sortuj(n, liczby);
	printf("\nPosortowane elementy:\n");
	wypisz(n, liczby);
	getchar();
	printf("Czy chesz zapisac posortowane elementy? "); scanf("%c", &w);
	if (w == 't') zapis(n, liczby);
	system("pause");
}
0

fscanf(plik, "%d", ...) w pętli while
następnie zamykasz plik

http://www.cplusplus.com/reference/cstdio/fscanf/

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