#ifndef UTIL_HIGHSSORT_H_
#define UTIL_HIGHSSORT_H_
#include <vector>
#include "lp_data/HConst.h"
using std::vector;
void addToDecreasingHeap(HighsInt& n, HighsInt mx_n, vector<double>& heap_v,
vector<HighsInt>& heap_ix, double v, HighsInt ix);
void sortDecreasingHeap(const HighsInt n, vector<double>& heap_v,
vector<HighsInt>& heap_ix);
void maxheapsort(HighsInt* heap_v, HighsInt n );
void maxheapsort(
HighsInt* heap_v, HighsInt* heap_i, HighsInt n );
void maxheapsort(
double* heap_v, HighsInt* heap_i, HighsInt n );
void buildMaxheap(HighsInt* heap_v, HighsInt n );
void buildMaxheap(
HighsInt* heap_v, HighsInt* heap_i, HighsInt n );
void buildMaxheap(
double* heap_v, HighsInt* heap_i, HighsInt n );
void maxHeapsort(HighsInt* heap_v, HighsInt n );
void maxHeapsort(
HighsInt* heap_v, HighsInt* heap_i, HighsInt n );
void maxHeapsort(
double* heap_v, HighsInt* heap_i, HighsInt n );
void maxHeapify(HighsInt* heap_v, HighsInt i, HighsInt n);
void maxHeapify(HighsInt* heap_v, HighsInt* heap_i, HighsInt i, HighsInt n);
void maxHeapify(double* heap_v, HighsInt* heap_i, HighsInt i, HighsInt n);
bool increasingSetOk(const vector<HighsInt>& set,
const HighsInt set_entry_lower,
const HighsInt set_entry_upper, bool strict);
bool increasingSetOk(const vector<double>& set, const double set_entry_lower,
const double set_entry_upper, bool strict);
void sortSetData(const HighsInt num_entries, vector<HighsInt>& set,
const double* data0, const double* data1, const double* data2,
double* sorted_data0, double* sorted_data1,
double* sorted_data2);
void sortSetData(const HighsInt num_entries, vector<HighsInt>& set,
const HighsVarType* data0, HighsVarType* sorted_data0);
#endif