#include <iostream>
using namespace std;
typedef int (*CompareFunctionType)(void *, void *);
//Теперь переменную это типа можно объявить так:
//CompareFunctionType compare_function_pointer = &Compare;
//В отдельной функции организуйте ввод элементов массива:
void InputArray(long input_data[], int length){
for (int i=0;i<length;i++){
cin>>input_data[i];
}
}
int CompareInt0to9(void *first_pointer, void *second_pointer ) {
long *first_element_int_pointer = (long *)first_pointer;
long *second_element_int_pointer = (long *)second_pointer;
return *first_element_int_pointer - *second_element_int_pointer;
}
int CompareInt9to0(void *first_pointer, void *second_pointer ) {
long *first_element_int_pointer = (long *)first_pointer;
long *second_element_int_pointer = (long *)second_pointer;
return *second_element_int_pointer - *first_element_int_pointer;
}
//В отдельной функции организуйте поиск индекса минимального элемента
//на подмассиве:
int FindMinimumIndex(long input_data[], int first_index, int last_index, CompareFunctionType compare_function_pointer){
int target=first_index;
for (int j=first_index;j<last_index;j++){
if ((*compare_function_pointer)(&input_data[j], &input_data[target])<0) {
target=j;
}
}
//cout<<target<<endl;
return target;
}
//В отдельной функции реализуйте обмен элементов массива.
void Swap(long &first_element, long &second_element){
long c=first_element;
first_element=second_element;
second_element=c;
}
//В отдельной функции организуйте сортировку.
void SelectionSort(long input_data[], int length, CompareFunctionType compare_function_pointer){
for (int i=0;i<length;i++){
int mini=FindMinimumIndex(input_data,i,length,compare_function_pointer);
Swap(input_data[i],input_data[mini]);
}
}
//В отдельной функции организуйте вывод элементов упорядоченного
//массива:
void OutputArray(long input_data[], int length){
for (int i=0;i<length;i++){
cout<<input_data[i]<<" ";
}
}
int main() {
int CompareInt0to9(void *first_pointer, void *second_pointer);
int CompareInt9to0(void *first_pointer, void *second_pointer);
const int kFunctionsCount = 2;
CompareFunctionType compare_function_pointers[kFunctionsCount];
compare_function_pointers[0]=CompareInt0to9;
compare_function_pointers[1]=CompareInt9to0;
int type; cin>>type;
int n; cin>>n;
long* arr=new long[n];
InputArray(arr, n);
//int Compare(void *first_pointer, void *second_pointer);
SelectionSort(arr,n,compare_function_pointers[type]);
OutputArray(arr,n);
return 0;
}