#include <stdio.h>
#define SIZE 10
void quick_sort(int *array, int low, int high);
int partition(int *array, int low, int high);
void heap_sort(int *array, int n);
void heapify(int *array, int n, int i);
void print_array(int *array, int size);
int main() {
int array[SIZE] = {5, 3, 8, 1, 2, 7, 4, 6, 10, 9};
int array_copy[SIZE];
for (int i = 0; i < SIZE; i++) {
array_copy[i] = array[i];
}
quick_sort(array, 0, SIZE - 1);
print_array(array, SIZE);
heap_sort(array_copy, SIZE);
print_array(array_copy, SIZE);
return 0;
}
void quick_sort(int *array, int low, int high) {
if (low < high) {
int pi = partition(array, low, high);
quick_sort(array, low, pi - 1);
quick_sort(array, pi + 1, high);
}
}
int partition(int *array, int low, int high) {
int pivot = array[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (array[j] < pivot) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i + 1];
array[i + 1] = array[high];
array[high] = temp;
return (i + 1);
}
void heap_sort(int *array, int n) {
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(array, n, i);
}
for (int i = n - 1; i > 0; i--) {
int temp = array[0];
array[0] = array[i];
array[i] = temp;
heapify(array, i, 0);
}
}
void heapify(int *array, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && array[left] > array[largest]) {
largest = left;
}
if (right < n && array[right] > array[largest]) {
largest = right;
}
if (largest != i) {
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
heapify(array, n, largest);
}
}
void print_array(int *array, int size) {
for (int i = 0; i < size; i++) {
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgU0laRSAxMAp2b2lkIHF1aWNrX3NvcnQoaW50ICphcnJheSwgaW50IGxvdywgaW50IGhpZ2gpOwppbnQgcGFydGl0aW9uKGludCAqYXJyYXksIGludCBsb3csIGludCBoaWdoKTsKdm9pZCBoZWFwX3NvcnQoaW50ICphcnJheSwgaW50IG4pOwp2b2lkIGhlYXBpZnkoaW50ICphcnJheSwgaW50IG4sIGludCBpKTsKdm9pZCBwcmludF9hcnJheShpbnQgKmFycmF5LCBpbnQgc2l6ZSk7CmludCBtYWluKCkgewogICAgaW50IGFycmF5W1NJWkVdID0gezUsIDMsIDgsIDEsIDIsIDcsIDQsIDYsIDEwLCA5fTsKICAgIGludCBhcnJheV9jb3B5W1NJWkVdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKICAgICAgICBhcnJheV9jb3B5W2ldID0gYXJyYXlbaV07CiAgICB9CiAgICBxdWlja19zb3J0KGFycmF5LCAwLCBTSVpFIC0gMSk7CiAgICBwcmludF9hcnJheShhcnJheSwgU0laRSk7CiAgICBoZWFwX3NvcnQoYXJyYXlfY29weSwgU0laRSk7CiAgICBwcmludF9hcnJheShhcnJheV9jb3B5LCBTSVpFKTsKICAgIHJldHVybiAwOwp9CnZvaWQgcXVpY2tfc29ydChpbnQgKmFycmF5LCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgaWYgKGxvdyA8IGhpZ2gpIHsKICAgICAgICBpbnQgcGkgPSBwYXJ0aXRpb24oYXJyYXksIGxvdywgaGlnaCk7CiAgICAgICAgcXVpY2tfc29ydChhcnJheSwgbG93LCBwaSAtIDEpOwogICAgICAgIHF1aWNrX3NvcnQoYXJyYXksIHBpICsgMSwgaGlnaCk7CiAgICB9Cn0KaW50IHBhcnRpdGlvbihpbnQgKmFycmF5LCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgaW50IHBpdm90ID0gYXJyYXlbaGlnaF07CiAgICBpbnQgaSA9IChsb3cgLSAxKTsKICAgIGZvciAoaW50IGogPSBsb3c7IGogPCBoaWdoOyBqKyspIHsKICAgICAgICBpZiAoYXJyYXlbal0gPCBwaXZvdCkgewogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGludCB0ZW1wID0gYXJyYXlbaV07CiAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07CiAgICAgICAgICAgIGFycmF5W2pdID0gdGVtcDsKICAgICAgICB9CiAgICB9CiAgICBpbnQgdGVtcCA9IGFycmF5W2kgKyAxXTsKICAgIGFycmF5W2kgKyAxXSA9IGFycmF5W2hpZ2hdOwogICAgYXJyYXlbaGlnaF0gPSB0ZW1wOwogICAgcmV0dXJuIChpICsgMSk7Cn0Kdm9pZCBoZWFwX3NvcnQoaW50ICphcnJheSwgaW50IG4pIHsKICAgIGZvciAoaW50IGkgPSBuIC8gMiAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaGVhcGlmeShhcnJheSwgbiwgaSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPiAwOyBpLS0pIHsKICAgICAgICBpbnQgdGVtcCA9IGFycmF5WzBdOwogICAgICAgIGFycmF5WzBdID0gYXJyYXlbaV07CiAgICAgICAgYXJyYXlbaV0gPSB0ZW1wOwogICAgICAgIGhlYXBpZnkoYXJyYXksIGksIDApOwogICAgfQp9CnZvaWQgaGVhcGlmeShpbnQgKmFycmF5LCBpbnQgbiwgaW50IGkpIHsKICAgIGludCBsYXJnZXN0ID0gaTsKICAgIGludCBsZWZ0ID0gMiAqIGkgKyAxOwogICAgaW50IHJpZ2h0ID0gMiAqIGkgKyAyOwoKICAgIGlmIChsZWZ0IDwgbiAmJiBhcnJheVtsZWZ0XSA+IGFycmF5W2xhcmdlc3RdKSB7CiAgICAgICAgbGFyZ2VzdCA9IGxlZnQ7CiAgICB9CiAgICBpZiAocmlnaHQgPCBuICYmIGFycmF5W3JpZ2h0XSA+IGFycmF5W2xhcmdlc3RdKSB7CiAgICAgICAgbGFyZ2VzdCA9IHJpZ2h0OwogICAgfQogICAgaWYgKGxhcmdlc3QgIT0gaSkgewogICAgICAgIGludCB0ZW1wID0gYXJyYXlbaV07CiAgICAgICAgYXJyYXlbaV0gPSBhcnJheVtsYXJnZXN0XTsKICAgICAgICBhcnJheVtsYXJnZXN0XSA9IHRlbXA7CiAgICAgICAgaGVhcGlmeShhcnJheSwgbiwgbGFyZ2VzdCk7CiAgICB9Cn0Kdm9pZCBwcmludF9hcnJheShpbnQgKmFycmF5LCBpbnQgc2l6ZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICBwcmludGYoIiVkICIsIGFycmF5W2ldKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQ==