Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- const int N = 10000;
- const int K = 4;
- int CompareInt0to9 (void *first_pointer, void *second_pointer){
- int *first_element_int_pointer = (int *)first_pointer;
- int *second_element_int_pointer = (int *)second_pointer;
- return *first_element_int_pointer - *second_element_int_pointer;
- }
- int CompareInt9to0(void *first_pointer, void *second_pointer ) {
- int *first_element_int_pointer = (int *)first_pointer;
- int *second_element_int_pointer = (int *)second_pointer;
- return *second_element_int_pointer - *first_element_int_pointer;
- }
- int CompareCharAtoZ (void *first_pointer, void *second_pointer) {
- char *first_element_char_pointer = (char *)first_pointer;
- char *second_element_char_pointer = (char *)second_pointer;
- return *first_element_char_pointer - *second_element_char_pointer;
- }
- int CompareCharZtoA (void *first_pointer, void *second_pointer) {
- char *first_element_char_pointer = (char *)first_pointer;
- char *second_element_char_pointer = (char *)second_pointer;
- return *second_element_char_pointer - *first_element_char_pointer;
- }
- typedef int(*CompareType)(void*, void*);
- CompareType compare_function_pointer[K] = {CompareInt0to9, CompareInt9to0, CompareCharAtoZ, CompareCharZtoA };
- void InputIntArray (int ArrIn[], int length){
- for(int i = 0; CompareInt0to9(&i, &length) < 0; i++)
- cin>> Arr[i];
- }
- void InputCharArray(int ArrCh[], int length) {
- for (int i = 0; CompareInt0to9(&i, &length) < 0; i++) {
- cin >> array[i];
- }
- }
- int FindMinimumIndex(int length, int width, void *array, int i, CompareType compare_function_pointer) {
- char *bytevise_array = (char *)array;
- int minimum_byte_number = i * width;
- int current_byte_number = 0;
- for (int element_number = i; element_number < length; element_number++) {
- current_byte_number = element_number * width;
- if (compare_function_pointer(&bytevise_array[current_byte_number], &bytevise_array[minimum_byte_number]) < 0 ) {
- minimum_byte_number = current_byte_number;
- }
- }
- return minimum_byte_number;
- }
- void SwapChar(char *first_element, char *second_element) {
- char vspom;
- vspom = *first_element;
- *first_element = *second_element;
- *second_element = vspom;
- }
- void Swap(void *first_pointer, void *second_pointer, int width) {
- for (int byte_number = 0; byte_number < width; byte_number++) {
- SwapChar((char *)first_pointer + byte_number, (char *)second_pointer + byte_number);
- }
- }
- void OutputCharArray(int length, char array[]) {
- setlocale(0, "");
- cout << "Длина = " << length << endl;
- for (int i = 0; CompareInt0to9(&i, &length) < 0; i++) {
- cout << Arr[i] << endl;
- }
- cout << endl;
- }
- void SelectionSort(int length, int width, void *array, CompareType compare_function_pointer) {
- char *bytevise_array = (char *)array;
- int min_i;
- int length_big = (length - 1) * width;
- for (int i = 0; CompareInt0to9(&i, &length_big) < 0; i += width) {
- min_i = i;
- Swap(&bytevise_array[FindMinimumIndex(length, width, array, i / width, compare_function_pointer)], &bytevise_array[i], width);
- }
- }
- void OutputArray (int Arr[], int length){
- cout << "Длина = " << length << endl;
- for (int i = i; CompareInt0to9(&i, &length) < 0; i++)
- cout << Arr[i]<< endl;
- cout << endl;
- }
- void choise(int &length, int &width, int &result) {
- cout << "Как сортирвоать 1 - по возрастанию инта, 2 - по убыванию инта, 3 - по возрастанию чар, 4 - по убыванию чар: ";
- cin >> result;
- result--;
- cout << "Введите длину массива: ";
- cin >> length;
- if (result > 1) {
- width = sizeof(char);
- } else {
- width = sizeof(int);
- }
- }
- int main()
- {
- int Arr[10000];
- int length;
- int windth;
- int result;
- int arrayInt[N];
- char arrayChar[N];
- choise(length, width, result);
- if (result > 1) {
- InputCharArray(length, ArrCh);
- SelectionSort(length, width, (void*)ArrCh, compare_function_pointer[result]);
- OutputCharArray(ArrCh, length);
- } else {
- InputIntArray(ArrInt, length);
- SelectionSort(length, width, (void*)ArrInt, compare_function_pointer[result]);
- OutputIntArray(ArrInt, length);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement