Показаны сообщения с ярлыком сортировка. Показать все сообщения
Показаны сообщения с ярлыком сортировка. Показать все сообщения

24 апреля 2016 г.

Дан двумерный массив размерностью 5х5, заполненный случайными числами из диапазона от 0 до 100. Переформировать массив таким образом, чтобы её столбцы располагались по убыванию их поэлементных сумм.

void InitAr(int A[][5],int size) {

for (size_t i = 0; i < size; i++) {
for (size_t j = 0; j < size; j++) {
A[i][j] = rand() % 100;
}
}

}




void ShowAr(int A[][5], int size) {

for (size_t i = 0; i < size; i++) {
for (size_t j = 0; j < size; j++) {
cout.width(3);
cout << A[i][j];
}
cout << endl;
}

}




void SummElem(int A[][5], int size, int S[]) {

for (size_t i = 0; i < size; i++)
for (size_t j = 0; j < size; j++)
S[j] += A[i][j];

}




void ShowSummElem(int S[], int size) {

for (size_t i = 0; i < size; i++) {
cout.width(4);
cout << S[i];
}
cout << endl << endl;

}




void ChangeColumns(int A[][5], int size, int x1,int x2) {

for (size_t i = 0; i < size; i++) {
for (size_t j = 0; j < size; j++) {
int tmp = A[i][x1];
A[i][x1] = A[i][x2];
A[i][x2] = tmp;
}
}

}




void SortArray(int A[][5], int size,int S[]) {

int tmp;
for (int i = 0; i < size; i++) {
for (int j = 1; j < size - i; j++) {
if (S[j - 1] > S[j]) {
tmp = S[j];
S[j] = S[j - 1];
S[j - 1] = tmp;
ChangeColumns(A, size, j, j-1);
}
}
}

}




void main() {

srand(time(0));
const int size = 5;
int A[size][size]{};
InitAr(A, size);
ShowAr(A, size);
int SUMM[size]{};
SummElem(A, size, SUMM);
ShowSummElem(SUMM,size);
SortArray(A, size, SUMM);
ShowAr(A, size);
system("pause");

}

Отсортируйте по возрастанию методом "вставками" одномерный целочисленный массив, заданный с клавиатуры различными числами. Выведите на экран исходный и отсортированный массивы.

const int size = 10;

int A[size]{};

int tmp;



for (int i = 0; i < size; i++) {

cout << "Enter A[" << i << "]:";
cin >> A[i];

}




cout << "Massive A:" << endl;

for (int i = 0; i < size; i++) {

cout << A[i] << "\t";

}

cout << endl;




for (int i = 0, j = 0; i < size; i++) {

tmp = A[i];
for (j = i - 1; j >= 0 && A[j] > tmp;j--) {
A[j + 1] = A[j];
}
A[j + 1] = tmp;

}

cout << endl << "Sort massive:" << endl;

for (int i = 0; i < size; i++)

cout << A[i] << "\t";

cout << endl;

system("pause");

Отсортируйте по невозрастанию методом "вставками" одномерный вещественный массив, заданный случайными числами на промежутке [0; 50). Выведите на экран исходный и отсортированный массивы.

srand (time (0));

const int size = 10;

double A[size]{};

double tmp;




cout << "Massive A:" << endl;

for (int i = 0; i < size; i++) {

A[i] = rand() % 5000*0.01;
cout << A[i] << "\t";

}

cout << endl;




for (int i = 0, j = 0; i < size; i++) {

tmp = A[i];
for (j = i - 1; j >= 0 && A[j] < tmp;j--) {
A[j + 1] = A[j];
}
A[j + 1] = tmp;

}

cout << endl << "Sort massive:" << endl;

for (int i = 0; i < size; i++)

cout << A[i] << "\t";

cout << endl;

system("pause");

Отсортируйте по неубыванию методом "пузырька" одномерный целочисленный массив, заданный случайными числами на промежутке [-100; 100). Выведите на экран исходный и отсортированный массивы.

srand (time (0));

const int size = 10;

int A[size];




cout << "Massive A:" << endl;

for (int i = 0; i < size; i++) {

A[i] = rand () % 201 - 100;
cout << A[i] << "\t";

}

int temp = 0;




for (int i = 0; i < size; i++) {

for (int j = 1; j < size - i; j++) {
if (A[j - 1] > A[j]) {
temp = A[j];
A[j] = A[j - 1];
A[j - 1] = temp;
}
}

}

cout << endl << "Sort massive:" << endl;

for (int i = 0; i < size; i++)

cout << A[i] << "\t";

system("pause");

22 апреля 2016 г.

Дан массив из 20 чисел. Отсортировать первую и третью пятерку чисел по возрастанию, а вторую и четвертую цепочку чисел по убыванию.

srand(time(0));
const int size = 50;
int A[size];

for (int i = 0; i < size; i++){
A[i] = rand() % 61 - 30;
cout << A[i] << "\t";
if ((i + 1) % 5 == 0)
cout << endl;
}
cout << "============================================" << endl;
int tmp = 0;
bool rele = false;//переключалка
int i_temp = 0;//нижняя граница
int size_temp=5;//верхняя граница
for (;size_temp<=size; i_temp += 5, size_temp += 5){
if (rele==false){
for (int i = i_temp; i < size_temp; i++){
for (int j = i_temp+1; j < size_temp; j++){
if (A[j - 1] > A[j]){
tmp = A[j];
A[j] = A[j - 1];
A[j - 1] = tmp;
}
}
}
rele = true;
}
else{
for (int i = i_temp; i < size_temp; i++){
for (int j = i_temp + 1; j < size_temp; j++){
if (A[j - 1] < A[j]){
tmp = A[j];
A[j] = A[j - 1];
A[j - 1] = tmp;
}
}
}
rele = false;
}
}
for (int i = 0; i < size; i++){
cout << A[i] << "\t";
if ((i+1)%5==0)
cout << endl;
}
system("pause");

21 мая 2015 г.

Двоичный поиск

int BinarySearch (int A[], int Lb, int Ub, int Key)
{
int M;
while(1)
{
M = (Lb + Ub)/2;
if (Key < A[M])
Ub = M - 1;
else
if (Key > A[M])
Lb = M + 1;
else
return M;

if (Lb > Ub)
return -1;
}
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];
int key,ind;

// до сортировки
for(int i=0;i<SIZE;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
cout<<"Enter any digit:";
cin>>key;
ind=BinarySearch(ar,0,SIZE,key);
cout<<"Index - "<<ind<<"\t";
cout<<"\n\n";
}

Написать функцию, которая упорядочит в массиве сначала чётные значения, а потом нечётные

void init(int A[], int size);
void out(int A[], int size);
void sort(int A[], int size);

void main()
{
setlocale(LC_ALL, "Russian");
const int s = 20;
int A[s];
int a;
do
{
cout << "Эта программа сортирует массив по возрастанию сначала чётные значения, а потом нечётные.\n";
init(A, s);
out(A, s);
sort(A, s);
cout << "\nРезультат:\n";
out(A, s);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[], int size)
{
srand(time(NULL));
for (int i = 0; i < size; i++)
A[i] = rand() % 100;
}

void out(int A[], int size)
{
cout << "\n";
for (int i = 0; i < size; i++)
cout << A[i] << " ";
cout << "\n";
}

void sort(int A[], int size)
{
int x, i, j;
for (i = 0; i < size; i++)
{
for (j = size - 1; j > i; j--)
{
if (A[j-1]%2 != 0 && A[j]%2==0)
{
x = A[j - 1];
A[j - 1] = A[j];
A[j] = x;
}
if (A[j - 1] > A[j] && A[j] % 2 == 0 && A[j - 1] % 2 == 0)
{
x = A[j - 1];
A[j - 1] = A[j];
A[j] = x;
}
if (A[j - 1] > A[j] && A[j] % 2 && A[j - 1] % 2)
{
x = A[j - 1];
A[j - 1] = A[j];
A[j] = x;
}
}
}
}

"Угадай число". Компьютер загадывает число от 0 до 10000. А пользователь должен его угадать, получая подсказки "больше" или "меньше"

void main()
{
srand(time(NULL));
setlocale(LC_ALL, "Russian");
int tmp;
do
{
int digit = rand() % 10000;
cout << "Игра ""Угадай число"". Компьютер загадал число от 0 до 10000 - отгадайте его!)\n";
int a=0;
for (;;)
{
cin >> tmp;
if (digit > tmp)
cout << "Моё число больше!)\n";
else if (digit < tmp)
cout << "Моё число меньше!)\n";
else if (digit == tmp)
{
cout << "Вы угадали!) Моё число - " << digit << "\n";
cout << "Вы использовали " << a << " попыток\n" ;
break;
}
a++;
}
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> tmp;
} while (tmp == 1);
}

Написать функцию, которая сортирует двумерный массив

void init(int A[][10], int weight, int length);
void out(int A[][10], int weight, int length);
void sort(int A[][10], int weight, int length);

void main()
{
setlocale(LC_ALL, "Russian");
const int length = 10;
const int weight = 15;
int A[weight][length];
int a;
do
{
cout << "Эта программа сортирует двумерный массив.\n";
init(A, weight, length);
out(A, weight, length);
sort(A, weight, length);
cout << "\nРезультат:\n";
out(A, weight, length);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[][10], int weight, int length)
{
srand(time(NULL));
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
A[i][j] = rand() % 100;
}
}
}

void out(int A[][10], int weight, int length)
{
cout << "\n";
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
cout << A[i][j] << "\t";
}
cout << "\n";
}
cout << "\n";
}

void sort(int A[][10], int weight, int length)
{
int x, i, j, k;
for (k = 0; k < weight*length; k++)
{
for (i = 0; i < weight; i++)
{
for (j = 0; j < length; j++)
{
if (A[i][j-1] > A[i][j])
{
x = A[i][j-1];
A[i][j-1] = A[i][j];
A[i][j] = x;
}
}
}
}
}

Написать функцию, которая сортирует в двумерном массиве каждую строку по отдельности

void init(int A[][10], int weight, int length);
void out(int A[][10], int weight, int length);
void sort(int A[][10], int weight, int length);

void main()
{
setlocale(LC_ALL, "Russian");
const int length = 10;
const int weight = 15;
int A[weight][length];
int a;
do
{
cout << "Эта программа сортирует в двумерном массиве каждую строку по отдельности.\n";
init(A, weight, length);
out(A, weight, length);
sort(A, weight, length);
cout << "\nРезультат:\n";
out(A, weight, length);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[][10], int weight, int length)
{
srand(time(NULL));
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
A[i][j] = rand() % 100;
}
}
}

void out(int A[][10], int weight, int length)
{
cout << "\n";
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
cout << A[i][j] << "\t";
}
cout << "\n";
}
cout << "\n";
}

void sort(int A[][10], int weight, int length)
{
int x, i, j, k;
for (k = 0; k < weight; k++)
{
for (i = 0; i < length; i++)
{
for (j = length - 1; j > i; j--)
{
if (A[k][j - 1] > A[k][j])
{
x = A[k][j - 1];
A[k][j - 1] = A[k][j];
A[k][j] = x;
}
}
}
}
}

Написать функцию, которая сортирует в двумерном массиве каждый столбец по отдельности

void init(int A[][10], int weight, int length);
void out(int A[][10], int weight, int length);
void sort(int A[][10], int weight, int length);

void main()
{
setlocale(LC_ALL, "Russian");
const int length = 10;
const int weight = 15;
int A[weight][length];
int a;
do
{
cout << "Эта программа сортирует в двумерном массиве каждый столбец по отдельности.\n";
init(A, weight, length);
out(A, weight, length);
sort(A, weight, length);
cout << "\nРезультат:\n";
out(A, weight, length);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[][10], int weight, int length)
{
srand(time(NULL));
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
A[i][j] = rand() % 100;
}
}
}

void out(int A[][10], int weight, int length)
{
cout << "\n";
for (int i = 0; i < weight; i++)
{
for (int j = 0; j < length; j++)
{
cout << A[i][j] << "\t";
}
cout << "\n";
}
cout << "\n";
}

void sort(int A[][10], int weight, int length)
{
int x, i, j, k;
for (k = 0; k < length; k++)
{
for (i = 0; i < weight; i++)
{
for (j = weight - 1; j > i; j--)
{
if (A[j - 1][k] > A[j][k])
{
x = A[j - 1][k];
A[j - 1][k] = A[j][k];
A[j][k] = x;
}
}
}
}
}

Быстрая сортировка

template <typename T>
void quickSortR(T a[], int B, int E)
{
long i = B, j = E;
T temp, p;
p = a[(B+E)/2];
do
{
while ( a[i] < p ) i++;
while ( a[j] > p ) j--;
if (i <= j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}while ( i<=j );
if(B<j)quickSortR(a, B, j);
if(i<E)quickSortR(a, i, E);
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];
// до сортировки
for(int i=0;i<SIZE;i++){
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
quickSortR(ar,0,SIZE-1);
// после сортировки
for(int i=0;i<SIZE;i++){
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}

12 мая 2015 г.

Дан массив из 20 целых чисел со значениями от 1 до 20. Необходимо: - написать функцию, разбрасывающую элементы массива произвольным образом; - создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве; - отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от найденной позиции по возрастанию.

void init(int A[], int size);
void out(int A[], int size);
void random(int A[], int size);
int search(int A[], int size, int digit);
void sort(int A[], int size, int key);

void main()
{
setlocale(LC_ALL, "Russian");
const int s = 20;
int A[s];
int a, digit,tmp;

do
{
init(A, s);
out(A, s);
cout << "\nЭта программа принимает массив из 20 целых чисел со значениями от 1 до 20:\n";
cout << "1 - разбрасывает элементы массива произвольным образом.\n";
cout << "2 - Пользователь вводит случайное число из того же диапазона, программа находит позицию этого числа в массиве\n";
cout << " и сортирует элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива,\n";
cout << " находящиеся справа от найденной позиции по возрастанию\n";
cout << "Введите ваш выбор: ";
cin >> a;
switch (a)
{
case 1:
random(A, s);
out(A, s);
case 2:
cout << "Введите число из диапазона от 1 до 20:";
cin>>digit;
tmp = search(A, s, digit);
if (tmp != -1)
{
cout << "Число " << digit << " есть в массиве под номером " << tmp << "\n";
sort(A, s, tmp);
out(A, s);
}
else
cout << "Число " << digit << " отсутствует в массиве\n";
}
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[], int size)
{
srand(time(NULL));
for (int i = 0; i < size; i++)
A[i] = rand() % 20+1;
}

void out(int A[], int size)
{
cout << "\n";
for (int i = 0; i < size; i++)
cout << A[i] << " ";
cout << "\n";
}

void random(int A[], int size)
{
int x, i, j;

for (i = 0; i<size; i++)
{
x = A[i];
for (j = i - 1; j >= 0 && A[j] != x && A[j]!=A[i]; j--)
A[j + 1] = A[j];
A[j + 1] = x;
}
}

int search(int A[], int size, int digit)
{
for (int i = 0; i<size; i++)
if (A[i] == digit)
return i;
return -1;
}

void sort(int A[], int size, int key)
{
int x, i, j;
for (i = 0; i<key; i++)
{
x = A[i];
for (j = i - 1; j >= 0 && A[j]<x; j--)
A[j + 1] = A[j];
A[j + 1] = x;
}
for (i = key+1; i<size; i++)
{
x = A[i];
for (j = i - 1; j >= key+1 && A[j]>x; j--)
A[j + 1] = A[j];
A[j + 1] = x;
}
}

Дан массив чисел размерностью 10 элементов. Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию. Первые 2 параметра функции - это массив и его размер, третий параметр по умолчанию равен 1.

void init(int A[], int size);
void out(int A[], int size);
void sort(int A[],int size,int uk);

void main()
{
setlocale(LC_ALL, "Russian");
const int s=10;
int A[s];
int a;
do
{
cout << "Эта программа сортирует массив по возрастанию или по убыванию.\n";
init(A, s);
out(A, s);
cout<<"1 - по убыванию\n0 - по возрастанию\n";
cin>>a;
if(a!=0)
sort(A,s,1);
else
sort(A,s,a);
cout<<"\nРезультат:\n";
out(A, s);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[], int size)
{
srand(time(NULL));
for (int i = 0; i < size; i++)
A[i] = rand() % 100;
}

void out(int A[], int size)
{
cout << "\n";
for (int i = 0; i < size; i++)
cout << A[i] << " ";
cout << "\n";
}

void sort(int A[],int size,int uk=1)
{
int x, i, j;
if(uk==0)
{
for(i=0;i<size;i++)
{
x=A[i];
for (j=i-1;j>=0&&A[j]>x;j--)
A[j+1]=A[j];
A[j+1] = x;
}
}
else if(uk==1)
{
for(i=0;i<size;i++)
{
x=A[i];
for (j=i-1;j>=0&&A[j]<x;j--)
A[j+1]=A[j];
A[j+1] = x;
}
}
}

Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними.

void init(int A[], int size);
void out(int A[], int size);
void sort(int A[],int size);

void main()
{
setlocale(LC_ALL, "Russian");
const int s=20;
int A[s];
int a;
do
{
cout << "Эта программа сортирует массив между позициями крайних отрицательных элементов.\n";
init(A, s);
out(A, s);
sort(A, s);
out(A, s);
cout << "\nЕсли хотите продолжить, нажмите 1\n";
cin >> a;
} while (a == 1);
}

void init(int A[], int size)
{
srand(time(NULL));
for (int i = 0; i < size; i++)
A[i] = rand() % 40-20;
}

void out(int A[], int size)
{
cout << "\n";
for (int i = 0; i < size; i++)
cout << A[i] << " ";
cout << "\n";
}

void sort(int A[],int size)
{
int x, i, j, tmp_i, tmp_j;
for(int a=0;a<size;a++)//находим индекс первого отрицательного элемента
{
if(A[a]<0)
{
tmp_i=a;
break;
}
}
for(int a=size-1;a>tmp_i;a--)//находим последнего отрицательного элемента
{
if(A[a]<0)
{
tmp_j=a;
break;
}
}
for(i=tmp_i;i<=tmp_j;i++)//сама сортировка
{
x=A[i];
for (j=i-1;j>=tmp_i&&A[j]>x;j--)
A[j+1]=A[j];
A[j+1] = x;
}
}

9 мая 2015 г.

"Пузырьковая" cортировка

template <class T>
void bubbleSort(T a[], long size)
{
long i, j;
T x;
for(i=0;i<size;i++)
{
for(j=size-1;j>i;j--)
{
if(a[j-1]>a[j]){
x=a[j-1];
a[j-1]=a[j];
a[j]=x;
}
}
}
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];

// до сортировки
for(int i=0;i<SIZE;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
bubbleSort(ar,SIZE);

// после сортировки
for(int i=0;i<SIZE;i++)
{
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}

Сортировка вставками

template <class T>
void insertSort(T a[], long size)
{
T x;
long i, j;

for(i=0;i<size;i++)
{
x=a[i];
for (j=i-1;j>=0&&a[j]>x;j--)
a[j+1]=a[j];
a[j+1] = x;
}
}

void main()
{
srand(time(NULL));
const long size=10;
int ar[size];
for(int i=0;i<size;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
insertSort(ar,size);

for(int i=0;i<size;i++)
{
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}

Оптимизированная сортировка вставками

template <class T>
void setMin(T a[],long size)
{
T min=a[0];
for(int i=1;i<size;i++)
if(a[i]<min)
min=a[i];
a[0]=min;
}

template <class T>
void insertSortGuarded(T a[], long size)
{
T x;
long i, j;
T backup = a[0];
setMin(a,size); 

for(i=1;i<size;i++){
x = a[i];
for (j=i-1;a[j]>x;j--)
a[j+1]=a[j];
a[j+1] = x;
}

for(j=1;j<size&&a[j]<backup;j++)
a[j-1]=a[j];
a[j-1] = backup;
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];
for(int i=0;i<SIZE;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
insertSortGuarded(ar,SIZE);

for(int i=0;i<SIZE;i++)
{
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}

Оптимизированная "Пузырьковая" cортировка или "шейкер-сортировка"

template <class T>
void shakerSort(T a[], long size)
{
long j, k=size-1;
long lb=1, ub=size-1;
T x;

do
{
for(j=ub;j>0;j--)
{
if(a[j-1]>a[j])
{
x=a[j-1];
a[j-1]=a[j];
a[j]=x;
k=j;
}
}
lb = k+1;
for(j=1;j<=ub;j++)
{
if(a[j-1]>a[j])
{
x=a[j-1];
a[j-1]=a[j];
a[j]=x;
k=j;
}
}
ub=k-1;
}while (lb<ub);
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];

for(int i=0;i<SIZE;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
shakerSort(ar,SIZE);

for(int i=0;i<SIZE;i++)
{
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}

Сортировка выбором

template <class T>
void selectSort(T a[], long size)
{
long i, j, k;
T x;
for(i=0;i<size;i++) {
k=i;
x=a[i];
for(j=i+1;j<size;j++) {
if(a[j]<x){
k=j;
x=a[j];
}
}
a[k]=a[i];
a[i]=x;
}
}

void main()
{
srand(time(NULL));
const long SIZE=10;
int ar[SIZE];
// до сортировки
for(int i=0;i<SIZE;i++)
{
ar[i]=rand()%100;
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
selectSort(ar,SIZE);
// после сортировки
for(int i=0;i<SIZE;i++)
{
cout<<ar[i]<<"\t";
}
cout<<"\n\n";
}