Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#define bool int
  4. //#define bool true 1
  5. //#define bool false 0
  6. int odczyt[20];
  7.  
  8. void Zapisz(int tab) {
  9.     FILE *pliczek;
  10.  
  11.     pliczek = fopen("zapis.txt", "a");
  12.     fprintf(pliczek, "%d \n", tab);
  13.     fclose(pliczek);
  14.     //  getch();
  15.  
  16. }
  17.  
  18. /*
  19. int wypelnij(int tab){
  20.      Wczytajzpliku();
  21.      int tabelem;
  22.                 int k = odczyt[0];
  23.                 printf("k=%d \n", k);
  24.                 int n = odczyt[1];
  25.                 printf("n=%d \n", n);
  26.                 i
  27.                 for (i = 2; i <= n + 1; i++) {
  28.  
  29.                     tabelem[i - 2] = odczyt[i];
  30.                     printf("%d ", tabelem[i - 2]);
  31.    
  32.                 }
  33.                 printf("\n");
  34.                 return tabelem;
  35. }
  36.  */
  37. int Wczytajzpliku() {
  38.     FILE *plik;
  39.     int i;
  40.  
  41.     if ((plik = fopen("plik.txt", "r")) == NULL) {
  42.         printf("Błąd otwarcia pliku\n");
  43.  
  44.     }
  45.     while (feof(plik) == 0) {
  46.         fscanf(plik, "%d ", &odczyt[i]);
  47.         i++;
  48.     }
  49.     fclose(plik);
  50.     return 0;
  51. }
  52.  
  53. static int licznik = 0;
  54.  
  55. 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
  56. {
  57.     int x = tablica[lewa]; // obieramy x
  58.     int i = lewa, j = prawa, w; // i, j - indeksy w tablicy
  59.  
  60.  
  61.  
  62.     while (1) // petla nieskonczona - wychodzimy z niej tylko przez return j
  63.     {
  64.  
  65.  
  66.         while (tablica[j] > x) { // dopoki elementy sa wieksze od x
  67.             j--;
  68.             licznik++;
  69.         }
  70.         licznik++;
  71.         while (tablica[i] < x) { // dopoki elementy sa mniejsze od x
  72.             i++;
  73.             licznik++;
  74.         }
  75.         licznik++;
  76.         if (i < j) // zamieniamy miejscami gdy i < j
  77.         {
  78.             w = tablica[i];
  79.             tablica[i] = tablica[j];
  80.             tablica[j] = w;
  81.             i++;
  82.             j--;
  83.  
  84.         } else // gdy i >= j zwracamy j jako punkt podzialu tablicy
  85.             return j;
  86.  
  87.     }
  88.  
  89. }
  90.  
  91. void quicksort(int tablica[], int lewa, int prawa) {
  92.     int q;
  93.     if (lewa < prawa) {
  94.  
  95.         q = partition(tablica, lewa, prawa); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu
  96.         quicksort(tablica, lewa, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy
  97.         quicksort(tablica, q + 1, prawa); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy
  98.     }
  99. }
  100.  
  101. int i, j, zliczanie = 0;
  102.  
  103. void sortowanie_babelkowe(int tab[], int n) {
  104.     for (i = 1; i <= n; i++) {
  105.         for (j = n - 1; j >= 1; j--) {
  106.             zliczanie++;
  107.             if (tab[j] < tab[j - 1]) {
  108.                 int bufor;
  109.                 bufor = tab[j - 1];
  110.                 tab[j - 1] = tab[j];
  111.                 tab[j] = bufor;
  112.             }
  113.         }
  114.     }
  115. }
  116.  
  117. int main(int argc, char *argv[]) {
  118.  
  119.  
  120.     int tabelem[20];
  121.     int n, k;
  122.     char c = 1;
  123.     do {
  124.         printf("********************MENU********************\n");
  125.         printf("*                                          *\n");
  126.         printf("*1.Dane                                    *\n");
  127.         printf("*2.Sortowanie babelkowe                    *\n");
  128.         printf("*3.Quicksort                               *\n");
  129.         printf("*4.Test                                    *\n");
  130.         printf("*5.Koniec                                  *\n");
  131.         printf("*                                          *\n");
  132.         printf("********************************************\n");
  133.         scanf("%s", &c);
  134.  
  135.         switch (c) {
  136.             case '1':
  137.                 /*
  138.                                 Wczytajzpliku();
  139.                                 int k = odczyt[0];
  140.                                 printf("k=%d \n", k);
  141.                                 int n = odczyt[1];
  142.                                 printf("n=%d \n", n);
  143.  
  144.                                 for (i = 2; i <= n + 1; i++) {
  145.  
  146.                                     tabelem[i - 2] = odczyt[i];
  147.                                     printf("%d ", tabelem[i - 2]);
  148.    
  149.                                 }
  150.                                 printf("\n");
  151.                                 break;
  152.                  */
  153.  
  154.                 break;
  155.             case '2':
  156.                 Wczytajzpliku();
  157.                 k = odczyt[0];
  158.                 printf("k=%d \n", k);
  159.                 n = odczyt[1];
  160.                 printf("n=%d \n", n);
  161.  
  162.                 for (i = 2; i <= n + 1; i++) {
  163.  
  164.                     tabelem[i - 2] = odczyt[i];
  165.                     printf("%d ", tabelem[i - 2]);
  166.  
  167.                 }
  168.                 sortowanie_babelkowe(tabelem, n);
  169.                 printf("\n ");
  170.                 for (i = 0; i <= n - 1; i++) {
  171.                     printf("%d ", tabelem[i]);
  172.  
  173.                 }
  174.                 printf("\n");
  175.                 printf("%d. najmniejszy klucz w tablicy to %d\n", k, tabelem[n - k]);
  176.                 printf("---------------(z)Zapisz---------------\n");
  177.             case 'z':
  178.                 Zapisz(tabelem[n - k]);
  179.                 continue;
  180.  
  181.                 break;
  182.  
  183.             case '3':
  184.  
  185.                 Wczytajzpliku();
  186.                 k = odczyt[0];
  187.                 printf("k=%d \n", k);
  188.                 n = odczyt[1];
  189.                 printf("n=%d \n", n);
  190.  
  191.                 for (i = 2; i <= n + 1; i++) {
  192.  
  193.                     tabelem[i - 2] = odczyt[i];
  194.                     printf("%d ", tabelem[i - 2]);
  195.  
  196.                 }
  197.                 quicksort(tabelem, 0, n - 1);
  198.  
  199.                 for (i = 0; i < n; i++) {
  200.                     printf(" %d", tabelem[i]);
  201.                 }
  202.                 printf("\n");
  203.                 printf("%d. najmniejszy klucz w tablicy to %d\n", k, tabelem[n - k]);
  204.                 printf("---------------(w)Zapisz---------------\n");
  205.             case 'w':
  206.                 Zapisz(tabelem[n - k]);
  207.                 break;
  208.  
  209.                 break;
  210.  
  211.  
  212.  
  213.  
  214.             case '4':
  215.  
  216.                 printf("rozmiar zadania: %d\n", n);
  217.                 printf("licznik operacji w metodzie I: %d\n", zliczanie);
  218.                 printf("licznik operacji w metodzie II: %d\n", licznik);
  219.  
  220.  
  221.  
  222.                 break;
  223.             case '5':
  224.                 exit(0);
  225.                 break;
  226.         }
  227.  
  228.     } while (c != 5);
  229.  
  230.     getchar();
  231.     return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement