Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //#define bool int
- //#define bool true 1
- //#define bool false 0
- int odczyt[20];
- void Zapisz(int tab) {
- FILE *pliczek;
- pliczek = fopen("zapis.txt", "a");
- fprintf(pliczek, "%d \n", tab);
- fclose(pliczek);
- // getch();
- }
- /*
- int wypelnij(int tab){
- Wczytajzpliku();
- int tabelem;
- int k = odczyt[0];
- printf("k=%d \n", k);
- int n = odczyt[1];
- printf("n=%d \n", n);
- i
- for (i = 2; i <= n + 1; i++) {
- tabelem[i - 2] = odczyt[i];
- printf("%d ", tabelem[i - 2]);
- }
- printf("\n");
- return tabelem;
- }
- */
- int Wczytajzpliku() {
- FILE *plik;
- int i;
- if ((plik = fopen("plik.txt", "r")) == NULL) {
- printf("BÅÄ d otwarcia pliku\n");
- }
- while (feof(plik) == 0) {
- fscanf(plik, "%d ", &odczyt[i]);
- i++;
- }
- fclose(plik);
- return 0;
- }
- static int licznik = 0;
- int partition(int tablica[], int lewa, int prawa) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa mniejsze badz rowne x, w drugiej wieksze lub rowne od x
- {
- int x = tablica[lewa]; // obieramy x
- int i = lewa, j = prawa, w; // i, j - indeksy w tablicy
- while (1) // petla nieskonczona - wychodzimy z niej tylko przez return j
- {
- while (tablica[j] > x) { // dopoki elementy sa wieksze od x
- j--;
- licznik++;
- }
- licznik++;
- while (tablica[i] < x) { // dopoki elementy sa mniejsze od x
- i++;
- licznik++;
- }
- licznik++;
- if (i < j) // zamieniamy miejscami gdy i < j
- {
- w = tablica[i];
- tablica[i] = tablica[j];
- tablica[j] = w;
- i++;
- j--;
- } else // gdy i >= j zwracamy j jako punkt podzialu tablicy
- return j;
- }
- }
- void quicksort(int tablica[], int lewa, int prawa) {
- int q;
- if (lewa < prawa) {
- q = partition(tablica, lewa, prawa); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu
- quicksort(tablica, lewa, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy
- quicksort(tablica, q + 1, prawa); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy
- }
- }
- int i, j, zliczanie = 0;
- void sortowanie_babelkowe(int tab[], int n) {
- for (i = 1; i <= n; i++) {
- for (j = n - 1; j >= 1; j--) {
- zliczanie++;
- if (tab[j] < tab[j - 1]) {
- int bufor;
- bufor = tab[j - 1];
- tab[j - 1] = tab[j];
- tab[j] = bufor;
- }
- }
- }
- }
- int main(int argc, char *argv[]) {
- int tabelem[20];
- int n, k;
- char c = 1;
- do {
- printf("********************MENU********************\n");
- printf("* *\n");
- printf("*1.Dane *\n");
- printf("*2.Sortowanie babelkowe *\n");
- printf("*3.Quicksort *\n");
- printf("*4.Test *\n");
- printf("*5.Koniec *\n");
- printf("* *\n");
- printf("********************************************\n");
- scanf("%s", &c);
- switch (c) {
- case '1':
- /*
- Wczytajzpliku();
- int k = odczyt[0];
- printf("k=%d \n", k);
- int n = odczyt[1];
- printf("n=%d \n", n);
- for (i = 2; i <= n + 1; i++) {
- tabelem[i - 2] = odczyt[i];
- printf("%d ", tabelem[i - 2]);
- }
- printf("\n");
- break;
- */
- break;
- case '2':
- Wczytajzpliku();
- k = odczyt[0];
- printf("k=%d \n", k);
- n = odczyt[1];
- printf("n=%d \n", n);
- for (i = 2; i <= n + 1; i++) {
- tabelem[i - 2] = odczyt[i];
- printf("%d ", tabelem[i - 2]);
- }
- sortowanie_babelkowe(tabelem, n);
- printf("\n ");
- for (i = 0; i <= n - 1; i++) {
- printf("%d ", tabelem[i]);
- }
- printf("\n");
- printf("%d. najmniejszy klucz w tablicy to %d\n", k, tabelem[n - k]);
- printf("---------------(z)Zapisz---------------\n");
- case 'z':
- Zapisz(tabelem[n - k]);
- continue;
- break;
- case '3':
- Wczytajzpliku();
- k = odczyt[0];
- printf("k=%d \n", k);
- n = odczyt[1];
- printf("n=%d \n", n);
- for (i = 2; i <= n + 1; i++) {
- tabelem[i - 2] = odczyt[i];
- printf("%d ", tabelem[i - 2]);
- }
- quicksort(tabelem, 0, n - 1);
- for (i = 0; i < n; i++) {
- printf(" %d", tabelem[i]);
- }
- printf("\n");
- printf("%d. najmniejszy klucz w tablicy to %d\n", k, tabelem[n - k]);
- printf("---------------(w)Zapisz---------------\n");
- case 'w':
- Zapisz(tabelem[n - k]);
- break;
- break;
- case '4':
- printf("rozmiar zadania: %d\n", n);
- printf("licznik operacji w metodzie I: %d\n", zliczanie);
- printf("licznik operacji w metodzie II: %d\n", licznik);
- break;
- case '5':
- exit(0);
- break;
- }
- } while (c != 5);
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement