View difference between Paste ID: 45CG9V3a and Vwe2VHaM
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
}