// Разделение с использованием схемы разделения Хоара
int partition(int a[], int low, int high)
{
int pivot = a[low];
int i = low - 1;
int j = high + 1;
while (1)
{
do {
i++;
} while (a[i] < pivot);
do {
j--;
} while (a[j] > pivot);
if (i >= j) {
return j;
}
swap(a[i], a[j]);
}
}
// Процедура быстрой сортировки
void quicksort(int a[], int low, int high)
{
// базовое условие
if (low >= high) {
return;
}
// переставить элементы по оси
int pivot = partition(a, low, high);
// повторяем подмассив, содержащий элементы, меньшие опорной точки
quicksort(a, low, pivot);
// повторяем подмассив, содержащий элементы, превышающие точку опоры
quicksort(a, pivot + 1, high);
}
int main()
{
int arr[N];
srand(time(NULL));
// генерируем случайный ввод целых чисел
for (int i = 0; i < N; i++) {
arr[i] = (rand() % 100) - 50;
}
quicksort(arr, 0, N - 1);
for (int i = 0; i < N; i++) {
cout << arr[i] << " ";
}
return 0;
include
include
include
using namespace std;
define N 15
// Разделение с использованием схемы разделения Хоара int partition(int a[], int low, int high) { int pivot = a[low]; int i = low - 1; int j = high + 1; while (1) { do { i++; } while (a[i] < pivot);
}
// Процедура быстрой сортировки void quicksort(int a[], int low, int high) { // базовое условие if (low >= high) { return; }
}
int main() { int arr[N]; srand(time(NULL));
}