SHOW:
|
|
- or go back to the newest paste.
| 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 = 7; |
| 8 | + | int pocetRadku = 11; |
| 9 | - | int pocetSloupcu = 13; |
| 9 | + | int pocetSloupcu = 23; |
| 10 | - | int zpracovatCisel = pocetRadku * pocetSloupcu; //pouzijeme abychom vedeli kam az probublavat... |
| 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 pocetIteraci = 0; |
| 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 | - | for(int k = 0; k < pocetRadku; ++k) |
| 33 | + | |
| 34 | int nastaloPrehozeni = 0; | |
| 35 | - | for(int l = 0; l < pocetSloupcu; ++l) |
| 35 | + | for(vnitrniIterace = 0; vnitrniIterace < zpracovatCisel; vnitrniIterace += smer) |
| 36 | {
| |
| 37 | - | printf("sort P:%02i:%02i - V: %02i, R: %i\n", k, l, matice[k][l], zpracovatCisel);
|
| 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 | - | //break; |
| 62 | + | |
| 63 | nastaloPrehozeni = 1; | |
| 64 | } | |
| 65 | - | if( matice[k][l] > 100) //nekde to preteklo a tohle se da pouzit na zjisteni daneho mista |
| 65 | + | |
| 66 | if(k == pocetRadku-1 && l == pocetSloupcu-1) | |
| 67 | - | printf("val err P:%02i:%02i - V: %02i\n", k, l, matice[k][l]);
|
| 67 | + | |
| 68 | //posledni polozka iterace, zmena smeru | |
| 69 | break; | |
| 70 | } | |
| 71 | } | |
| 72 | if(smer == -1) | |
| 73 | {
| |
| 74 | - | --zpracovatCisel; |
| 74 | + | |
| 75 | - | ++pocetIteraci; |
| 75 | + | |
| 76 | if(k == pocetRadku-1 && l == pocetSloupcu-1) | |
| 77 | {
| |
| 78 | //posledni polozka iterace | |
| 79 | break; | |
| 80 | } | |
| 81 | } | |
| 82 | ||
| 83 | ||
| 84 | ||
| 85 | ||
| 86 | - | printf("\n\nserazeno v %i iteracich:\n", pocetIteraci);
|
| 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 | } |