/*дана матрица ar [row,col]. Упорядочить каждый столбец матрицы по возрастанию суммы значений элементов матрицы
5 разных способов. способы сортировок: пузырьковой, отбора, вставки, Шелла, быстрой сортировки.
Вывести на экран неупорядоченную и упорядоченную матрицы
Вывести на экран число сравнений и перестановок переменных в каждом методе сортировки*/
#include "stdafx.h"
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
HANDLE hStdout;
//---------------------------------------------------------------------------------
void bubble(int **summ,int **ar,const int row,const int col);
void select(int **summ,int **ar,const int row,const int col);
void insert(int **summ,int **ar,const int row,const int col);
void shall(int **summ,int **ar,const int row,const int col);
void quick(int **summ,int **ar,const int row,const int col);
void qs(int **summ,int **ar, int first, int last, const int row,const int col);
int ** newarr(int row, int col);
int ** aclone(int **ar,const int row,const int col);
void printAr(int ** ar, int row, int col);
//----------------------------------------------------------------------------------
int main (void)
{
int row, col, t, b, c, i, j;
int **summ, **summ1, **ar,**ar1, **ts, **ta;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdout, BACKGROUND_INTENSITY);
SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN);
srand(time(0));
SetConsoleTextAttribute(hStdout, 10);
cout<<"Vveddite kolichestvo strok > 0\n";
cin>>row;
cout<<"Vvedite kolichestvo ctolbtsov> 0\n";
cin>>col;
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
printf("\n");
SetConsoleTextAttribute(hStdout, 11);
cout<<"Isxodnaya matritsa:\n";
printf("\n");
ar=new int* [row];
for (i=0; i<row; i++)
ar=new int[col];
ar1=new int* [row];
for (i=0; i<row; i++)
ar1=new int[col];
for(i = 0;i < row;++i)
{
ar = new int[col];
for(j = 0;j < col;++j)
ar[j] = rand() % 999;
}
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
printf ("%-4d",ar[j]);
printf(" ");
}
printf("\n");
}
printf("\n");
//--------------------------------------------------------------------------------
summ=new int* [row];
for (i=0; i<row; i++)
summ=new int[col];
summ1=new int* [row];
for (i=0; i<row; i++)
summ1=new int[col];
for (j=0; j<col; j++)
{
for (i=0; i<row; i++)
{
t=ar[j]/100;
b=(ar[j]-t*100)/10;
c=(ar[j]-t*100-b*10);
summ[j]=t+b+c;
}
}
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
SetConsoleTextAttribute(hStdout, 12);
printf("\n");
printf("Summi elementov:\n");
printf("\n");
printAr(summ,row,col);
//-------------------------------------------------------------------------------------------
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
SetConsoleTextAttribute(hStdout, 2);
printf("Sortirovka puzirkom:\n");
ta = aclone (ar,row,col);
ts = aclone (summ,row,col);
bubble(ts, ta, row,col);
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
printf("\n");
SetConsoleTextAttribute(hStdout, 14);
printf("\n");
printf("Sortirovka otborom:\n");
ta = aclone (ar,row,col);
ts = aclone (summ,row,col);
select(ts, ta,row,col);
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
printf("\n");
SetConsoleTextAttribute(hStdout, 9);
printf("\n");
printf("Sortirovka vstavkami:\n");
ta = aclone (ar,row,col);
ts = aclone (summ,row,col);
insert(ts, ta,row,col);
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
printf("\n");
SetConsoleTextAttribute(hStdout, 7);
printf("\n");
printf("Sortirovka metodom Shella:\n");
ta = aclone (ar,row,col);
ts = aclone (summ,row,col);
shall(ts, ta,row,col);
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
printf("\n");
SetConsoleTextAttribute(hStdout, 13);
printf("\n");
printf("Bistraya sortirovka:\n");
ta = aclone (ar,row,col);
ts = aclone (summ,row,col);
quick(ts, ta,row,col);
printf("\n");
SetConsoleTextAttribute(hStdout, 15);
cout<<"--------------------------------------------------------------------------------";
cin >> i;
cout<<"Press any key";
getch();
return 0;
}
//--------------------------------------------------------------------------------
//ПУЗЫРЬКОМ
void bubble(int **summ,int **ar,const int row,const int col)
{
int i,j,w,t,sravn,perest;
bool b;
sravn=0;
perest=0;
do
{
b=false;
for (j=0; j<col; j++)
for (i=0; i<row-1; i++)
if (summ[j]>summ[i+1][j])
{
w=ar[j];
ar[j]=ar[i+1][j];
ar[i+1][j]=w;
t=summ[j];
summ[j]=summ[i+1][j];
summ[i+1][j]=t;
b=true;
perest++;
sravn++;
}
else {sravn++;}
}
while (b);
printAr(ar,row,col);
printf("\n");
printf("sravn %d; perest %d\n",sravn,perest);
}
//ОТБОРОМ
void select(int **summ,int **ar,const int row,const int col)
{
int i,j,w,t,m,sravn,perest;
sravn=0;
perest=0;
for (j=0; j<col; j++)
for (m=0; m<row-1; m++)
for (i=m+1; i<row; i++)
{
if (summ[j]<summ[m][j])
{
w=ar[m][j];
ar[m][j]=ar[j];
ar[j]=w;
t=summ[m][j];
summ[m][j]=summ[j];
summ[j]=t;
perest++;
sravn++;
}
else
{sravn++;}
}
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
printf ("%-4d",ar[j]);
printf(" ");
}
printf("\n");
}
printf("\n");
printf("sravn ");
printf("%d",sravn);
printf("; perest ");
printf("%d",perest);
printf("\n");
}
//ВСТАВКАМИ
void insert(int **summ,int **ar,const int row,const int col)//сортировка вставками
{
//вставка.................................................................................................
int i,j,t,w,m, sravn,perest;
sravn=0;
perest=0;
for (j=0; j<col;j++)
{
for (i=0; i<row; i++)
{
sravn++;
t=summ[j];
w=ar[j];
for (m = i-1; m >= 0 && t < summ[m][j]; m--)
{
sravn++;
ar[m+1][j]= ar[m][j];
summ[m+1][j] = summ[m][j];
}
summ [m+1][j]=t;
ar [m+1][j]=w;
perest++;
}
}
printAr(ar,row,col);
printf("\n");
printf("sravn %d; perest %d\n",sravn,perest);
}
//Шелла
void shall(int **summ,int **ar,const int row,const int col)
{
int i,j,w,t,p,m,perest;
long sravn;
sravn=0;
perest=0;
for (j=0; j<col; j++)
for (i=0; i<row-1; i++)
while(summ[j]>summ[i+1][j])
{
for (m=3; m>0; m--)
for (p=0; p<row-m; p++)
if (summ[j]>summ[m+p][j])
{
w=ar[j];
ar[j]=ar[p+m][j];
ar[p+m][j]=w;
t=summ[j];
summ[j]=summ[p+m][j];
summ[p+m][j]=t;
perest++;
sravn++;
}
else
{sravn++;}
}
printAr(ar,row,col);
printf("\n");
printf("sravn %d; perest %d\n",sravn,perest);
}
//БЫСТРАЯ
void qs(int **ar,int **summ int l, int r)
{
int p, i, j, com,row,col;
i = l; j = r;
com = summ [(l + r) / 2];
do
{
while (summ [j] > summ (com) && i < r) i++;
while (summ [j] < summ (com) && j > l) j--;
if (i <= j)
{
sravn++ ;
p = ar;
ar = ar[j];
ar[j] = p;
perest++;
j--;
i++;
};
} while (i <= j);
if (l < j) {qs (ar, l, j); sravn++;}
if (i < r) {qs (ar, i, r); sravn++;}
}
printAr(ar,row,col);
printf("\n");
printf("sravn %d; perest %d\n",sravn,perest);
}
void quick(int **summ, int **ar,const int row,const int col)
{
qs(summ, ar, 0, row-1, row, col);
}
//-----------------------------------------------------------------------------------
//копирование массива
int ** newarr(int row, int col)
{
int ** ar, i;
ar = new int* [row];
for (i=0;i<row;i++)
{
ar = new int [col];
}
return ar;
}
int ** aclone(int **ar,const int row,const int col)
{
int i,j,**clone;
clone = newarr(row,col);
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
{
clone[j]=ar[j];
}
}
return clone;
}
//Вывод отсортированного массива
void printAr(int ** ar, int row, int col)
{
int i,j;
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
printf ("%-4d",ar[j]);
}
printf("\n");
}
}
сортировки вставкой и быстрая(c++)
5 разных способов. способы сортировок: пузырьковой, отбора, вставки, Шелла, быстрой сортировки.
Вывести на экран неупорядоченную и упорядоченную матрицы
Вывести на экран число сравнений и перестановок переменных в каждом методе сортировки
.проблемы ТОЛЬКО с быстрой! подскажите, пожалуйста,что неверно делаю... только нужно без tmp и template...я в них ничего не понимаю...
Код:
со вставкой разобралась..с быстрой не поможете?...