Quick actions

cmd+k|ctrl+k

Navigation

Languages

Lab Sort

Snippet info

Language

Cpp

Visibility

public

Author

aldelank

Created

2017-12-25T22:57:08Z

Updated

2017-12-27T12:12:34Z

#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;
}
INFO