Пример 1:
Допустим у нас есть одномерный массив элементов:
index1 0 1 2 3 4 5 6
X 10 80 30 90 40 50 70
#include <iostream>
using namespace std;
int x[20], n;
//***************************************************
void sortare(int st, int dr, int x[20]){
int aux;
if (x[st]>x[dr]) {
aux=x[st]; x[st]=x[dr]; x[dr]=aux;
}
}
//***************************************************
void interclasare(int st, int dr, int m, int x[20]){
int b[20], i, j, k;
i=st; j=m+1; k=1;
while(i<=m && j<=dr)
if(x[i]<=x[j]){
b[k]=x[i]; i++; k++;
}
else{
b[k]=x[j]; j++; k++;
}
if(i<=m)
for(j=i;j<=m;j++){
b[k]=x[j]; k++;
}
else
for(i=j;i<=dr;i++){
b[k]=x[i]; k++;
}
k=1;
1 din 7
for(i=st;i<=dr;i++){
x[i]=b[k]; k++;
}
}
//***************************************************
void divimp(int st, int dr, int x[20]){
int m;
if((dr-st)<=1) sortare(st, dr, x);
else{
m=(st+dr)/2; divimp(st,m,x); divimp(m+1,dr,x);
interclasare(st, dr, m, x);
}
}
// Функция вывода элементов массива
void afisareMasiv(int x[], int n){
for (int i = 0; i < n; i++){
cout << x[i] << " ";
}
cout << "\n";
}
// Главная программа
int main(){
int x[] = {10, 80, 30, 90, 40, 50, 70};
int n = sizeof(x)/sizeof(x[0]);
cout << "Одномерный массив: \n\t";
afisareMasiv(x, n);
cout << "Отсортированный по возрастанию одномерный массив:
\n\t";
divimp(1, n-1, x); afisareMasiv(x, n);
}
Одномерный массив:
10 80 30 90 40 50 70
Отсортированный по возрастанию одномерный массив:
10 30 40 50 70 80 90
Пример 2:
Допустим у нас есть одномерный массив элементов:
index2 0 1 2 3 4 5 6
X A C M K B P T
2 din 7
Далее рассмотрим алгоритм MergeSort для сортировки элементов
по возрастанию:
#include <iostream>
using namespace std;
int x[20], n;
//***************************************************
void sortare(int st, int dr, char x[20]){
int aux;
if (x[st]>x[dr]) {
aux=x[st]; x[st]=x[dr]; x[dr]=aux;
}
}
//***************************************************
void interclasare(int st, int dr, int m, char x[20]){
int b[20], i, j, k;
i=st; j=m+1; k=1;
while(i<=m && j<=dr)
if(x[i]<=x[j]){
b[k]=x[i]; i++; k++;
}
else{
b[k]=x[j]; j++; k++;
}
if(i<=m)
for(j=i;j<=m;j++){
b[k]=x[j]; k++;
}
else
for(i=j;i<=dr;i++){
b[k]=x[i]; k++;
}
k=1;
for(i=st;i<=dr;i++){
x[i]=b[k]; k++;
}
}
//***************************************************
void divimp(int st, int dr, char x[20]){
int m;
if((dr-st)<=1) sortare(st, dr, x);
else{
m=(st+dr)/2; divimp(st,m,x); divimp(m+1,dr,x);
interclasare(st, dr, m, x);
}
}
3 din 7
// Функция вывода элементов массива
void afisareMasiv(char x[], int n){
for (int i = 0; i < n; i++){
cout << x[i] << " ";
}
cout << "\n";
}
// Главная программа
int main(){
int i;
char x[] = {'A','C','M','K','B','P','T'};
int n = sizeof(x)/sizeof(x[0]);
cout << "Одномерный массив: \n\t";
afisareMasiv(x, n);
cout << "Отсортированный по возрастанию одномерный
массив:\n\t";
divimp(1, n-1, x); afisareMasiv(x, n);
}
Одномерный массив:
A C M K B P T
Отсортированный по возрастанию одномерный массив:
A B C K M P T
Предлагаемые задачи
1. Измените программу в Примере 1 так, чтобы мы получили
расположение элементов одномерного массива в порядке
убывания.
Одномерный массив:
10 80 30 90 40 50 70
Одномерный массив X, отсортированный по убыванию:
90 80 70 50 40 30 10
2. Измените программу из примера 2 так, чтобы мы получили
расположение элементов одномерного массива в порядке
убывания.
Одномерный массив: Y:
A C M K B P T
Одномерный массив Y, отсортированный по убыванию:
T P M K C B A
4 din 7
ЗАДАЧИ НА ЛАБОРАТОРНОЕ ЗАНЯТИЕ
Подгруппа 1
1. Примените изученный алгоритм для пошагового упорядочения по
возрастанию и убыванию элементов следующих одномерных массивов:
5 din 7
Подгруппа 2
1. Примените изученный алгоритм для пошагового упорядочения по
возрастанию и убыванию элементов следующих одномерных массивов:
6 din 7
ДОМАШНЕЕ ЗАДАНИЕ
***ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ***
7 din 7