Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //Koktejlove razeni matice matice
- //Neni to zatim dodelane uplne podle zadani ale už to aspon (neefektivne) funguje.
- int main()
- {
- //deklarace promennych
- int pocetRadku = 11;
- int pocetSloupcu = 23;
- int celkemCisel = pocetRadku * pocetSloupcu; //pouzijeme abychom vedeli kam az probublavat...
- int zpracovatCisel = celkemCisel;
- int smer = 1; //1 = dolu; -1 = nahoru;
- int matice[pocetRadku][pocetSloupcu];
- int vnejsiIterace;
- int vnitrniIterace;
- srand(time(NULL));
- int serazeno = 0;
- //naplnìní matice a jeji vypis
- for(int i = 0; i < pocetRadku; ++i)
- {
- for(int j = 0; j < pocetSloupcu; ++j)
- {
- matice[i][j] = rand() % 100;
- printf("%02i ", matice[i][j]);
- }
- printf("\n");
- }
- //serazeni matice
- while(serazeno == 0)
- {
- int nastaloPrehozeni = 0;
- for(vnitrniIterace = 0; vnitrniIterace < zpracovatCisel; vnitrniIterace += smer)
- {
- int k = vnitrniIterace / pocetSloupcu; //sloupcova pozice
- int l = vnitrniIterace % pocetSloupcu; //radkova pozice
- if(smer == 1) //zleva doprava dolu...
- {
- //printf("sort P:%02i:%02i - V: %02i, R: %i\n", k, l, matice[k][l], zpracovatCisel);
- if(l < pocetSloupcu-1) //stejny radek
- {
- if((matice[k][l]) > matice[k][l+1])
- {
- int temp = matice[k][l];
- matice[k][l] = matice[k][l+1];
- matice[k][l+1] = temp;
- nastaloPrehozeni = 1;
- }
- }
- if(k < pocetRadku-1 && l == pocetSloupcu -1) //posledni polozka neposledniho radku
- {
- if((matice[k][l]) > matice[k+1][0]) //posledni polozka aktualniho radku s prvni polozkou nasledujiciho
- {
- int temp = matice[k][l];
- matice[k][l] = matice[k+1][0];
- matice[k+1][0] = temp;
- nastaloPrehozeni = 1;
- }
- }
- if(k == pocetRadku-1 && l == pocetSloupcu-1)
- {
- //posledni polozka iterace, zmena smeru
- break;
- }
- }
- if(smer == -1)
- {
- if(k == pocetRadku-1 && l == pocetSloupcu-1)
- {
- //posledni polozka iterace
- break;
- }
- }
- if( matice[k][l] > 100) //nekde to preteklo a tohle se da pouzit na zjisteni daneho mista
- {
- printf("val err P:%02i:%02i - V: %02i\n", k, l, matice[k][l]);
- }
- }
- ++vnejsiIterace;
- --zpracovatCisel; //omezení bublani serazenou casti matice
- //printf("\nVnitrnich iteraci: %i", vnitrniIterace); //dukaz, ze to neprobublava celou matici
- if(nastaloPrehozeni == 1)
- {
- continue;
- }
- else
- {
- serazeno = 1;
- }
- }
- //vypis serazene matice
- printf("\n\nserazeno v %i iteracich:\n", vnejsiIterace);
- for(int i = 0; i < pocetRadku; ++i)
- {
- for(int j = 0; j < pocetSloupcu; ++j)
- {
- printf("%02i ", matice[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement