Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. const int N = 10000;
  5. const int K = 4;
  6.  
  7. int CompareInt0to9 (void *first_pointer, void *second_pointer){
  8.     int *first_element_int_pointer = (int *)first_pointer;
  9.     int *second_element_int_pointer = (int *)second_pointer;
  10.  
  11. return *first_element_int_pointer - *second_element_int_pointer;
  12. }
  13.  
  14. int CompareInt9to0(void *first_pointer, void *second_pointer ) {
  15.     int *first_element_int_pointer = (int *)first_pointer;
  16.     int *second_element_int_pointer = (int *)second_pointer;
  17.     return *second_element_int_pointer - *first_element_int_pointer;
  18. }
  19.  
  20. int CompareCharAtoZ (void *first_pointer, void *second_pointer) {
  21.     char *first_element_char_pointer = (char *)first_pointer;
  22.     char *second_element_char_pointer = (char *)second_pointer;
  23.     return *first_element_char_pointer - *second_element_char_pointer;
  24. }
  25.  
  26. int CompareCharZtoA (void *first_pointer, void *second_pointer) {
  27.     char *first_element_char_pointer = (char *)first_pointer;
  28.     char *second_element_char_pointer = (char *)second_pointer;
  29.     return *second_element_char_pointer - *first_element_char_pointer;
  30. }
  31. typedef int(*CompareType)(void*, void*);
  32.  
  33. CompareType compare_function_pointer[K] = {CompareInt0to9, CompareInt9to0, CompareCharAtoZ, CompareCharZtoA };
  34.  
  35. void InputIntArray (int ArrIn[], int length){
  36.     for(int i = 0; CompareInt0to9(&i, &length) < 0; i++)
  37.         cin>> Arr[i];
  38. }
  39. void InputCharArray(int ArrCh[], int length) {
  40.     for (int i = 0; CompareInt0to9(&i, &length) < 0; i++) {
  41.         cin >> array[i];
  42.     }
  43. }
  44.  
  45. int FindMinimumIndex(int length, int width, void *array, int i, CompareType compare_function_pointer) {
  46.     char *bytevise_array = (char *)array;
  47.     int minimum_byte_number = i * width;
  48.     int current_byte_number = 0;
  49.     for (int element_number = i; element_number < length; element_number++) {
  50.         current_byte_number = element_number * width;
  51.         if (compare_function_pointer(&bytevise_array[current_byte_number], &bytevise_array[minimum_byte_number]) < 0 ) {
  52.             minimum_byte_number = current_byte_number;
  53.         }
  54.     }
  55.     return minimum_byte_number;
  56. }
  57.  
  58. void SwapChar(char *first_element, char *second_element) {
  59.     char vspom;
  60.     vspom = *first_element;
  61.     *first_element = *second_element;
  62.     *second_element = vspom;
  63. }
  64.  
  65. void Swap(void *first_pointer, void *second_pointer, int width) {
  66.     for (int byte_number = 0; byte_number < width; byte_number++) {
  67.         SwapChar((char *)first_pointer + byte_number, (char *)second_pointer + byte_number);
  68.     }
  69. }
  70. void OutputCharArray(int length, char array[]) {
  71.     setlocale(0, "");
  72.     cout << "Длина  = " << length << endl;
  73.     for (int i = 0; CompareInt0to9(&i, &length) < 0; i++) {
  74.         cout << Arr[i] << endl;
  75.     }
  76.     cout << endl;
  77. }
  78.  
  79.  
  80. void SelectionSort(int length, int width, void *array, CompareType compare_function_pointer) {
  81.     char *bytevise_array = (char *)array;
  82.     int min_i;
  83.     int length_big = (length - 1) * width;
  84.     for (int i = 0; CompareInt0to9(&i, &length_big) < 0; i += width) {
  85.         min_i = i;
  86.         Swap(&bytevise_array[FindMinimumIndex(length, width, array, i / width, compare_function_pointer)], &bytevise_array[i], width);
  87.     }
  88. }
  89. void OutputArray (int Arr[], int length){
  90.     cout << "Длина  = " << length << endl;
  91.     for (int i = i; CompareInt0to9(&i, &length) < 0; i++)
  92.         cout << Arr[i]<< endl;
  93.     cout << endl;    
  94. }
  95.  
  96.  void choise(int &length, int &width, int &result) {
  97.     cout << "Как сортирвоать  1 - по возрастанию инта, 2 - по убыванию инта, 3 - по возрастанию чар, 4 - по убыванию чар: ";
  98.     cin >> result;
  99.     result--;
  100.     cout << "Введите длину массива: ";
  101.     cin >> length;
  102.     if (result > 1) {
  103.         width = sizeof(char);
  104.     } else {
  105.         width = sizeof(int);
  106.     }
  107. }
  108.  
  109. int main()
  110. {
  111.    
  112.     int Arr[10000];
  113.     int length;
  114.     int windth;
  115.     int result;
  116.     int arrayInt[N];
  117.     char arrayChar[N];
  118.     choise(length, width, result);
  119.     if (result > 1) {
  120.         InputCharArray(length, ArrCh);
  121.         SelectionSort(length, width, (void*)ArrCh, compare_function_pointer[result]);
  122.         OutputCharArray(ArrCh, length);
  123.     } else {
  124.         InputIntArray(ArrInt, length);
  125.         SelectionSort(length, width, (void*)ArrInt, compare_function_pointer[result]);
  126.         OutputIntArray(ArrInt, length);
  127.     }
  128.  
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement