Rozumiem że sam int main() wykonał ci się w 0.54 sekundy , bo na razie w takiej formie to nie zabardzo idzie :)
#include <time.h>
#include <stdlib.h>
#include <cstdio>
const int C=3;
const int R=5;
void druk(int tab[R][C],int col,int row)
{
int i,j;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
printf("%d",tab[i][j]);
printf("\n");
}
}
void zam(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
return;
}
void sort(int tab[R][C],int ile_col,int nr_col,int low,int high)
{
int i,j,k;
int x;
x=tab[(low+high)/2][nr_col];
i=low;
j=high;
do
{
while(tab[i][nr_col]<x)
++i;
while(tab[j][nr_col]>x)
++j;
if(i<=j)
{
for(k=0;k<ile_col;k++)
zam(&tab[i][k],&tab[j][k]);
++i;
++j;
}
}
while(i<j);
if(low<j)
sort(tab,ile_col,nr_col,low,j);
if(high>i)
sort(tab,ile_col,nr_col,i,high);
return;
}
int main()
{
int col_count, sort_column_count;
vector<int> sort_columns;
cin >> col_count;
cin >> sort_column_count;
copy_n(
istream_iterator<double>(cin),
sort_column_count,
back_inserter(sort_columns)
);
vector<vector<double>> matrix;
double temp;
vector<double> new_row;
while(cin >> temp) {
new_row.push_back(temp);
if(new_row.size() == col_count) {
matrix.push_back(move(new_row));
new_row = {};
}
}
auto cmp_by_column = [](int n){
auto cmp = [=](auto&& l, auto&& r){
return l.at(n) < r.at(n);
};
return cmp;
};
for(int i = 0; i < sort_column_count; i++) {
stable_sort(matrix.begin(), matrix.end(), cmp_by_column(sort_columns[i]-1));
}
for(auto const& r : matrix) {
copy(r.begin(), r.end(), ostream_iterator<double>(cout, " "));
cout << '\n';
}
}
Znaczy zapytam inaczej , jak to się ma do mojego kodu bo nie ukrywam że ten co mi wysłałeś jest nie w pełni zrozumiałe dla mnie , z tym co ja napisałem . Napisałeś że program wykonał ci się w 0.54s no ok ale co tam wkleiłeś ? Bardzo doceniam twój wkład i wysiłek w napisanie tego kodu , lecz inne nazwy zmiennych są troszkę mylące . Pozdrawiam
Czy możesz dokładnie określić kod jakiego użyłeś ,który ci się wykonał w 0.54 s ?
Czy ktoś wie dlaczego na spoju ten kod wyruca błędną odpowiedź ? i jak ten kod powinien poprawnie wyglądac ?
#include <time.h>
#include <stdlib.h>
#include <cstdio>
const int C=3;
const int R=5;
void druk(int tab[R][C],int col,int row)
{
int i,j;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
printf("%d",tab[i][j]);
printf("\n");
}
}
void zam(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
return;
}
void sort(int tab[R][C],int ile_col,int nr_col,int low,int high)
{
int i,j,k;
int x;
x=tab[(low+high)/2][nr_col];
i=low;
j=high;
do
{
while(tab[i][nr_col]<x)
++i;
while(tab[j][nr_col]>x)
++j;
if(i<=j)
{
for(k=0;k<ile_col;k++)
zam(&tab[i][k],&tab[j][k]);
++i;
++j;
}
}
while(i<j);
if(low<j)
sort(tab,ile_col,nr_col,low,j);
if(high>i)
sort(tab,ile_col,nr_col,i,high);
return;
}
int main()
{
int nr_col;
int tab[R][C];
int i,j;
time_t start,end;
double dif;
int col=C;
int row=R;
srand(time(NULL));
for(j=0;j<col;j++)
for(i=0;i<row;i++)
tab[i][j]=rand()%4;
druk(tab,col,row);
printf("Enter");
getchar();
time(&start);
for(nr_col=0;nr_col<col;nr_col++)
{
sort(tab,col,nr_col,R,row-1);
druk(tab,col,row);
printf("Enter");
getchar();
}
time(&end);
dif=difftime(end,start);
printf("Czas sortowania\n",dif);
printf("ENTER...\n");
getchar();
return 0;
}