#include <iostream>
using namespace std;
//функция, сливающая массивы
void Merge(int *A, int first, int last) {
int middle, start, final, j;
int *mas = new int[100];
middle = (first + last) / 2; //вычисление среднего элемента
start = first; //начало левой части
final = middle + 1; //начало правой части
for (j = first; j <= last; j++) //выполнять от начала до конца
if ((start <= middle) && ((final > last) || (A[start] < A[final]))) {
mas[j] = A[start];
start++;
} else {
mas[j] = A[final];
final++;
}
//возвращение результата в список
for (j = first; j <= last; j++)
A[j] = mas[j];
delete[] mas;
};
//рекурсивная процедура сортировки
void MergeSort(int *A, int first, int last) {
if (first < last) {
MergeSort(A, first, (first + last) / 2); //сортировка левой части
MergeSort(A, (first + last) / 2 + 1, last); //сортировка правой части
Merge(A, first, last); //слияние двух частей
}
}
//главная функция
void main() {
setlocale(LC_ALL, "Rus");
int i, n;
int *A = new int[100];
cout << "Размер массива > ";
cin >> n;
for (i = 1; i <= n; i++) {
cout << i << " элемент > ";
cin >> A[i];
}
MergeSort(A, 1, n); //вызов сортирующей процедуры
cout << "Упорядоченный массив: "; //вывод упорядоченного массива
for (i = 1; i <= n; i++)
cout << A[i] << " ";
delete[] A;
system("pause>>void");
}
#include<iostream>
using namespace std;
void quickSort(int a[], long N) {
if (N < 2)
return;
long i = 0, j = N - 1;
int p = a[N >> 1];
while (i < j) {
while (a[i] < p) i++;
while (a[j] > p) j--;
if (i < j)
swap(a[i++], a[j--]);
}
quickSort(a, j);
quickSort(a + i, N - i);
}
void funcprint(int arr[], int size)
{
for (int i = 0; i <size; i++)
cout<< arr[i]<<" " ;
cout<<endl;
}
int main() {
int a[10] = { 1,2,3,4,1,2,6,7,8 };
int N = 8;
quickSort(a, N);
funcprint(a, N);
}