Skocz do zawartości
szydlak

Pomocy Sortowanie

Rekomendowane odpowiedzi

pomożcie bo nie moge sobie poradzic z sortowaniem danych, maja byc 2 sortowania do wyboru, troszke zacząłem ale dalej nie potrafie, prosze tylko o 2 algorytmy

 

 

#include <stdio.h>	/* Standardowe funkcje wejscia/wyjscia */#include <string.h>   /* Funkcje przetwarzania tekstu */#include <stdlib.h>   /* Makrodefinicje EXIT_SUCCESS i EXIT_FAILURE,						 funkcja system */#include <ctype.h>  #include <conio.h>  #ifndef EXIT_SUCCESS#define EXIT_SUCCESS 0#endif#ifndef EXIT_FAILURE#define EXIT_FAILURE 1#endif#define MAX   30   /* Maksymalna liczba wpisow w bazie danych  */#define INPUT 4	/* Maksymalna dlugosc wprowadzanego indeksu */#define FALSE 0#define TRUE  1  #define DOS	typedef short int BOOL; typedef struct		/* Definicja typu strukturalnego telefony   */{	char Nazwisko[50];		char Imie[50];	// imie,	char adres[50];		 /* Miejscowosc						  */	char telefon[20];	   /* Numer telefonu					   */} telefony;int wszystkie_wpisy(void);void /*inline*/ potwierdzenie(void);int dane_osoby(void);		/* Prezentuje dany wpis				 */int szukaj_wpisu(void);	  /* Przeszukuje baze					 */int dodaj_wpis(void);		/* Dodaje nowy wpis					 */int usun_wpis(void);		 /* Usuwa wpis						   */int zachowaj_baze(void);	 /* Zapisuje baze danych do pliku		*/int wczytaj_baze(void);	  /* Laduje baze z pliku do pamieci	   */void sortuj_baze(void);	   /* Sortuje baze wg pola personalia	  */void info(void); telefony baza[MAX];   /* Zmienna strukturalna baza */int numer = 0;		/* Licznik wszystkich wpisow */void /*inline*/ potwierdzenie(void){#ifdef DOS	printf("\n   ");	system("pause");#else	printf("\n   Nacisnij ENTER, aby kontynuowac...");	while (getchar() != '\n');#endif}	 int main(void){char wybor;	do  /* Petla do-while musi wykonac sie przynajmniej raz */	{		/* Menu glowne programu */		clrscr();		printf("\n		KSIAZKA TELEFONICZNA  \n\n");		printf("	[1]  Wyswietl wszystkie wpisy w bazie   \n\n"					   "	[2]  Przedstaw informacje o osobie	  \n\n"			   "	[3]  Znajdz wpis w bazie danych		 \n\n"			   "	[4]  Dodaj wpis do bazy danych		  \n\n"			   "	[5]  Usun wpis z bazy				   \n\n"			   "	[6]  Zachowaj baze danych			   \n\n"			   "	[7]  Zaladuj baze danych				\n\n"			   "	[8]  Sortowanie bazy danych			 \n\n"			   "	[9]  Informacje o programie			 \n\n"			   "	[0]  Wyjscie							\n\n");		/* Pobierz dane od uzytkownika */		printf("   Twoj wybor: ");		wybor = getchar();		fflush(stdin);	/* Wyczysc bufor klawiatury */		clrscr();		/* Wywolanie funkcji w zaleznosci od wyboru uzytkownika */		switch (wybor)		{			case '1' : wszystkie_wpisy();				break;			case '2' : dane_osoby();				break;			case '3' : szukaj_wpisu();				break;			case '4' : dodaj_wpis();				break;			case '5' : usun_wpis();				break;			case '6' : zachowaj_baze();				break;			case '7' : wczytaj_baze();				break;			case '8' : sortuj_baze();				break;			case '9' : info();				break;			case '0' :				break;			default :			{				printf("\n   Nie ma takiej opcji! \n");				potwierdzenie();			}				break;		}	} while (wybor != '0');	printf("\n   ZAMYKANIE PROGRAMU \n");	potwierdzenie();	return EXIT_SUCCESS;}	  int wszystkie_wpisy(void){int i;	  /* Zmienna pomocnicza - indeks petli */	printf("\n   WYKAZ WSZYSTKICH WPISOW \n");	if (numer == 0)	/* Nie ma zadnego wpisu! */	{		printf("\n   Baza danych jest pusta"			   " lub nie zostala zaladowana z pliku! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Wyswietl wszystkie osoby wraz z numerami ich indeksow */	for (i = 0; i < numer; i++)	{		printf("\n   %d   %s ", i+1, baza[i].Nazwisko);				printf("	  %s ", baza[i].Imie);		/* Zatrzymaj program po zapelnieniu ekranu */		if ((i + 1)%10 == 0)		{			potwierdzenie();			clrscr;		}	}	printf("\n   Koniec danych \n");	potwierdzenie();	return EXIT_SUCCESS;}		 int dane_osoby(void){char wpis[INPUT];		/* Tekst wpisany przez uzytkownika */int index;				/* Wpis do prezentacji			 */	printf("\n   PREZENTOWANIE DANYCH \n");	printf("\n   Wprowadz indeks osoby:  ");	index = atoi(gets(wpis));	/* Konwersja typu danych */	if (index < 1 || index > numer)	/* Nie ma takiego indeksu! */	{		printf("\n   Indeks nie jest poprawny! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Drukuj dane na ekranie */	printf("\n   Nazwisko :  %s", baza[index - 1].Nazwisko);	printf("\n   Imie:  %s", baza[index - 1].Imie);	printf("\n   Miejscowosc:	  %s", baza[index - 1].adres);	printf("\n   Telefon:		  %s", baza[index - 1].telefon);	potwierdzenie();	return EXIT_SUCCESS;}	   int szukaj_wpisu(void){char szukana[30];	  /* Szukane nazwisko lub miejscowosc */int index, k = 0;	  /* Zmienne pomocnicze			   */	printf("\n   WYSZUKIWANIE INFORMACJI W BAZIE \n");	printf("\n   Wprowadz nazwisko lub miejscowosc do wyszukania: ");	gets(szukana);	clrscr();	for (index = 0; index < numer; index++)	{		/* Wyswietlanie informacji o wyszukanych wpisach */		if (strstr(baza[index].Nazwisko, szukana)			|| strstr(baza[index].adres, szukana))		{			printf("\n   Nazwisko i imie:  %s", baza[index].Nazwisko);						printf("\n   Nazwisko i imie:  %s", baza[index].Imie);			printf("\n   Miejscowosc:	  %s", baza[index].adres);			printf("\n   Telefon:		  %s", baza[index].telefon);			printf("\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");			k++;			/* Zatrzymaj program po zapelnieniu ekranu */			if (k%3 == 0)			{				potwierdzenie();				clrscr();			}		}	}	if (k == 0)  /* Brak rezultatow! */	{		printf("\n   Nie znaleziono zadnego wpisu! \n");		potwierdzenie();		return EXIT_FAILURE;	}	printf("\n   To wszystkie wpisy jakie znaleziono! \n");	potwierdzenie();	return EXIT_SUCCESS;}int dodaj_wpis(void){	printf("\n   DODAWANIE WPISU DO BAZY DANYCH \n");	if (numer >= MAX)		  /* Baza danych jest pelna! */	{		printf("\n   Baza danych jest pelna! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Pobierz od uzytkownika wszystkie informacje o osobie */	/* Sprawdz czy wpisy nie sa za dlugie */	do	{		printf("\n   Nazwisko:   ");		gets(baza[numer].Nazwisko);		if (strlen(baza[numer].Nazwisko) > 48)			printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");	} while (strlen(baza[numer].Nazwisko) > 48);		do		{		  printf("\n   Imie:   ");		gets(baza[numer].Imie);		if (strlen(baza[numer].Imie) > 48)			printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");					   } while (strlen(baza[numer].Imie) > 48);	do	{		printf("\n   Miejscowosc:	  ");		gets(baza[numer].adres);		if (strlen(baza[numer].adres) > 48)			printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");	} while (strlen(baza[numer].adres) > 48);	do	{		printf("\n   Telefon:		  ");		gets(baza[numer].telefon);		if (strlen(baza[numer].telefon) > 18)			printf("\n   Mozna wpisac maksymalnie 18 znakow! \n");	} while (strlen(baza[numer].telefon) > 18);	/* Nic nie wpisano w polu Nazwisko i imie lub Telefon */	if ((strlen(baza[numer].telefon) == 0)		|| (strlen(baza[numer].Nazwisko) == 0))	{		printf("\n   Wpis nie zostal dodany do bazy danych!"			   "\n   Musi zostac podane nazwisko i numer telefonu! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Do kazdego pola dodaj znacznik konca lini */	strcat(baza[numer].Nazwisko, "\n");		strcat(baza[numer].Imie, "\n");		strcat(baza[numer].adres, "\n");	strcat(baza[numer].telefon, "\n");	numer++;	/* Zwieksz liczbe wpisow o jeden */	printf("\n   Wpis zostal dodany do bazy danych! \n");	potwierdzenie();	return EXIT_SUCCESS;}		  int usun_wpis(void){char wpis[INPUT];		/* Tekst wpisany przez uzytkownika */int kasuj_nr;			/* Wpis do usuniecia			   */	printf("\n   USUWANIE WPISU Z BAZY \n");	printf("\n   Podaj indeks wpisu do usuniecia: ");	kasuj_nr = atoi(gets(wpis));	/* Konwersja typu danych */	/* Nie ma takiego wpisu! */	if ((kasuj_nr < 1) || (kasuj_nr > numer))	{		printf("\n   Nie ma w bazie wpisu o takim indeksie! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Usuwanie - przeindeksowanie bazy */	while ((kasuj_nr - 1) < numer)	{		baza[kasuj_nr - 1] = baza[kasuj_nr];		kasuj_nr++;	}	numer--;	printf("\n   Wpis zostal usuniety \n");	potwierdzenie();	return EXIT_SUCCESS;}	   int zachowaj_baze(void){FILE *PlikBazy;	/* Wskaznik do pliku bazy */int i;			 /* Zmienna pomocnicza	 */char znak;	printf("\n   ZAPISYWANIE DANYCH DO PLIKU telefony.dbs \n");		printf("\n   Jestes pewien? [T]ak/[N]ie  ");	znak = getchar();	fflush(stdin);	if (toupper(znak) != 'T')	{		printf("\n   Baza danych nie zostala zapisana \n");		potwierdzenie();		return EXIT_FAILURE;	}	PlikBazy = fopen("telefony.dbs", "w" );	/* Otworz do pisania */	/* Nie mozna otworzyc pliku telefony.dbs! */	if (PlikBazy == NULL)	{		printf("\n   Nie mozna otworzyc pliku bazy danych! \n");		potwierdzenie();		return EXIT_FAILURE;	}		/* Zapisz aktualna liczbe osob w bazie */	fprintf(PlikBazy, "%d\n", numer);	/* Zachowaj reszte danych */	for (i = 0; i < numer; i++)	{		fputs(baza[i].Nazwisko, PlikBazy);				fputs(baza[i].Imie, PlikBazy);		fputs(baza[i].adres, PlikBazy);		fputs(baza[i].telefon, PlikBazy);	}	printf("\n   Baza danych zostala zachowana! \n");	potwierdzenie();	return EXIT_SUCCESS;}		int wczytaj_baze(void){FILE *PlikBazy;	/* Wskaznik do pliku bazy */int i;			 /* Zmienna pomocnicza	 */	printf("\n   WCZYTYWANIE DANYCH Z PLIKU telefony.dbs \n");	/* Otworz plik tylko do odczytu */	PlikBazy = fopen("telefony.dbs", "r");	/* Nie mozna otworzyc pliku telefony.dbs!*/	if (PlikBazy == NULL)	{		printf("\n   Nie mozna otworzy pliku bazy danych! \n");		potwierdzenie();		return EXIT_FAILURE;	}	/* Czytaj z pliku aktualna liczbe wpisow w bazie */	fscanf(PlikBazy, "%d\n", &numer);	if (numer > MAX)	{		printf("\n   W bazie danych jest za duzo wpisow! \n");		potwierdzenie();		return EXIT_FAILURE;	}		/* Czytaj reszte danych z pliku */	for (i = 0; i < numer; i++)	{		fgets(baza[i].Nazwisko, 50, PlikBazy);				fgets(baza[i].Imie, 50, PlikBazy);		fgets(baza[i].adres, 50, PlikBazy);		fgets(baza[i].telefon, 20, PlikBazy);	}	printf("\n   Baza danych zostala zaladowana! \n");	potwierdzenie();	return EXIT_SUCCESS;}		 void sortuj_baze(void){   char tab[20];int j,temp1,temp2,temp,i,wybor;	printf("\n   SORTOWANIE BAZY DANYCH \n");	  printf(" [1]-sortowanie sekwencyjne [2]-sortowanie babelkowe\n");	  printf(" twoj wybor..");	  scanf("%d", &wybor);	  switch (wybor) {	  case 1: {		for (i=0; i<numer-1; i++) {		for (j=0; j<numer-2; j++) {		 }		 }}			  void info(void){	printf("\n   INFORMACJE O PROGRAMIE \n");	printf("\n   Nazwa:	Ksiazka telefoniczna wersja ANSI-C 0.8d"		   "\n   Autor:	Grzegorz Szydlo szydlak18@interia.pl"		   "\n   Opis:	 Program umozliwia wprowadzanie, usuwanie,"		   "\n			 wyszukiwanie, sortowanie oraz przechowywanie"		   "\n			 w pliku danych o numerach telefonicznych"		   "\n"		   "\n   Licencja: public domain \n");	potwierdzenie();}
Edytowane przez szydlak

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

algorytmy:

bąbelkowe opis

przez wybieranie

przez wstawianie Sortowanie_przez_wstawianie

przez wstawianie z binarnym wyszukiwaniem

przez scalanie(mergesort) Mergesort

kopcowanie(heapsort)

szybkie (quicksort) Sortowanie_szybkie

 

uzyj googla z tymi hasłami

Edytowane przez Haquim

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

algorytmy:

bąbelkowe opis

przez wybieranie

przez wstawianie Sortowanie_przez_wstawianie

przez wstawianie z binarnym wyszukiwaniem

przez scalanie(mergesort) Mergesort

kopcowanie(heapsort)

szybkie (quicksort) Sortowanie_szybkie

 

uzyj googla z tymi hasłami

A ja się wtrącę z pytaniem ;) Czy 'string' to jest typ z porzadkiem liniowym? Tzn. czy da się powiedzieć że np. "ola" > "ala"? Wydaje mi się że tak ale dobrze jakby mnie ktoś w tym przekonaniu utwierdził ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tzn. czy da się powiedzieć że np. "ola" > "ala"? Wydaje mi się że tak ale dobrze jakby mnie ktoś w tym przekonaniu utwierdził ;)

Tak.. stringi sortuje sie leksykograficznie.. czyli wg kolejnosci liter w danym alfabecie.

 

PS. ha! bylem szybszy ;]

Edytowane przez FiDO

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A ja się wtrącę z pytaniem ;) Czy 'string' to jest typ z porzadkiem liniowym? Tzn. czy da się powiedzieć że np. "ola" > "ala"? Wydaje mi się że tak ale dobrze jakby mnie ktoś w tym przekonaniu utwierdził ;)

porządek wprowadzany na stringach nazywa się porządkiem leksykograficzny wyglada to min tak: "a" < "aa" < "al" < "ala" < "ola" < "z" itd, porównywanie rozpoczyna się od pierwszego znaku i kończy gdy któraś para nie jest sobie równa np. "domek" ?" domeczek":

d = d

o = o

m = m

e = e

k > c

więc "domek" > "domeczek"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...