acobzew

counting_sort

Nov 15th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. /*
  2.   Сортировка подсчётом
  3.   Автор: Антон Кобзев
  4. */
  5.  
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #define MAX_ELEMENT_VALUE 3000 // Данная сортировка накладывает ограничение на максимально значение сортируемых чисел
  9.  
  10. int main() {
  11.   int n, count[MAX_ELEMENT_VALUE * 2 + 1] = {0}, // count[i] - сколько встретилось число i во входном потоке
  12.       i, value, inputRes = 0;
  13.  
  14.   printf("Enter elements count: ");
  15.   if (scanf("%d", &n) != 1 || n <= 0) {
  16.     printf("Error, incorrect input\n"); // Ошибка, если ввели не число, а что-то ещё
  17.     return 1;
  18.   }
  19.  
  20.   printf("Enter elements: ");
  21.   for (i = 0; i < n; i++) {
  22.     inputRes = scanf("%d", &value);
  23.     if (value > MAX_ELEMENT_VALUE) {
  24.       printf("Error, too large number: %d, max allowed: %d\n", value, MAX_ELEMENT_VALUE);
  25.       return 1;
  26.     } else if (value < -MAX_ELEMENT_VALUE) {
  27.       printf("Error, too small number: %d, min allowed: %d\n", value, -MAX_ELEMENT_VALUE);
  28.       return 1;
  29.     } else if (inputRes == 1) {
  30.       count[value + MAX_ELEMENT_VALUE]++; // Считаем, сколько раз ввели данное число
  31.     } else {
  32.       printf("Error, incorrect input\n"); // Ошибка, если ввели не число, а что-то ещё
  33.       return 1;
  34.     }
  35.   }
  36.  
  37.   for (i = 0; i < MAX_ELEMENT_VALUE * 2 + 1; i++)
  38.     while (count[i]--) // Сколько раз число ввели, столько раз его и выводим
  39.       printf("%d ", i - MAX_ELEMENT_VALUE);
  40.  
  41.   printf("\n");
  42.  
  43.   return 0;
  44. }
  45.  
  46. // SESH
Advertisement
Add Comment
Please, Sign In to add comment