#include "qiktri.h" static void insertion_sort(int* array, int low, int high) { for (int i = low + 1; i <= high; i++) { int key = array[i]; int j = i - 1; while (j >= low && array[j] > key) { array[j + 1] = array[j]; j--; } array[j + 1] = key; } } static int partition_qiktri(int* array, int low, int high) { int mid = low + (high - low) / 2; // médiane de trois pour choisir un bon pivot if (array[mid] < array[low]) { int tmp = array[mid]; array[mid] = array[low]; array[low] = tmp; } if (array[high] < array[low]) { int tmp = array[high]; array[high] = array[low]; array[low] = tmp; } if (array[mid] < array[high]) { int tmp = array[mid]; array[mid] = array[high]; array[high] = tmp; } 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 qiktri(int* array, int low, int high) // ⬅️ plus de "static" { while (low < high) { if (high - low < 16) { insertion_sort(array, low, high); break; } int pi = partition_qiktri(array, low, high); if (pi - low < high - pi) { qiktri(array, low, pi - 1); low = pi + 1; } else { qiktri(array, pi + 1, high); high = pi - 1; } } }