Advertisement
thebys

matrix shaker sort in progress

Nov 30th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //Koktejlove razeni matice matice
  4. //Neni to zatim dodelane uplne podle zadani ale už to aspon (neefektivne) funguje.
  5. int main()
  6. {
  7.     //deklarace promennych
  8.     int pocetRadku = 11;
  9.     int pocetSloupcu = 23;
  10.     int celkemCisel = pocetRadku * pocetSloupcu; //pouzijeme abychom vedeli kam az probublavat...
  11.     int zpracovatCisel = celkemCisel;
  12.     int smer = 1; //1 = dolu; -1 = nahoru;
  13.     int matice[pocetRadku][pocetSloupcu];
  14.     int vnejsiIterace;
  15.     int vnitrniIterace;
  16.     srand(time(NULL));
  17.  
  18.     int serazeno = 0;
  19.  
  20.     //naplnìní matice a jeji vypis
  21.     for(int i = 0; i < pocetRadku; ++i)
  22.     {
  23.         for(int j = 0; j < pocetSloupcu; ++j)
  24.         {
  25.             matice[i][j] = rand() % 100;
  26.             printf("%02i ", matice[i][j]);
  27.         }
  28.         printf("\n");
  29.     }
  30.  
  31.     //serazeni matice
  32.     while(serazeno == 0)
  33.     {
  34.         int nastaloPrehozeni = 0;
  35.         for(vnitrniIterace = 0; vnitrniIterace < zpracovatCisel; vnitrniIterace += smer)
  36.         {
  37.  
  38.             int k = vnitrniIterace / pocetSloupcu; //sloupcova pozice
  39.             int l = vnitrniIterace % pocetSloupcu; //radkova pozice
  40.  
  41.  
  42.             if(smer == 1) //zleva doprava dolu...
  43.             {
  44.                 //printf("sort P:%02i:%02i - V: %02i, R: %i\n", k, l, matice[k][l], zpracovatCisel);
  45.  
  46.                 if(l < pocetSloupcu-1) //stejny radek
  47.                 {
  48.                     if((matice[k][l]) > matice[k][l+1])
  49.                     {
  50.                         int temp = matice[k][l];
  51.                         matice[k][l] = matice[k][l+1];
  52.                         matice[k][l+1] = temp;
  53.                         nastaloPrehozeni = 1;
  54.                     }
  55.                 }
  56.                 if(k < pocetRadku-1 && l == pocetSloupcu -1) //posledni polozka neposledniho radku
  57.                 {
  58.                     if((matice[k][l]) > matice[k+1][0]) //posledni polozka aktualniho radku s prvni polozkou nasledujiciho
  59.                     {
  60.                         int temp = matice[k][l];
  61.                         matice[k][l] = matice[k+1][0];
  62.                         matice[k+1][0] = temp;
  63.                         nastaloPrehozeni = 1;
  64.                     }
  65.                 }
  66.                 if(k == pocetRadku-1 && l == pocetSloupcu-1)
  67.                 {
  68.                     //posledni polozka iterace, zmena smeru
  69.                     break;
  70.                 }
  71.             }
  72.             if(smer == -1)
  73.             {
  74.  
  75.  
  76.                 if(k == pocetRadku-1 && l == pocetSloupcu-1)
  77.                 {
  78.                     //posledni polozka iterace
  79.                     break;
  80.                 }
  81.             }
  82.  
  83.  
  84.  
  85.  
  86.  
  87.             if( matice[k][l] > 100) //nekde to preteklo a tohle se da pouzit na zjisteni daneho mista
  88.             {
  89.                 printf("val err P:%02i:%02i - V: %02i\n", k, l, matice[k][l]);
  90.             }
  91.  
  92.  
  93.  
  94.  
  95.         }
  96.         ++vnejsiIterace;
  97.         --zpracovatCisel; //omezení bublani serazenou casti matice
  98.  
  99.         //printf("\nVnitrnich iteraci: %i", vnitrniIterace); //dukaz, ze to neprobublava celou matici
  100.  
  101.         if(nastaloPrehozeni == 1)
  102.         {
  103.             continue;
  104.         }
  105.         else
  106.         {
  107.             serazeno = 1;
  108.         }
  109.  
  110.  
  111.     }
  112.  
  113.     //vypis serazene matice
  114.     printf("\n\nserazeno v %i iteracich:\n", vnejsiIterace);
  115.     for(int i = 0; i < pocetRadku; ++i)
  116.     {
  117.         for(int j = 0; j < pocetSloupcu; ++j)
  118.         {
  119.             printf("%02i ", matice[i][j]);
  120.         }
  121.         printf("\n");
  122.     }
  123.  
  124.  
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement