Неправильно работает qsort с отрицательными числами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. При использовании функции qsort - программа неправильно сортирует отрицательные числа. Например: "-40 -30 -20 -10 2 4 5 3" сортирует как "-10 -20 -30 -40 2 3 4 5". Написал свою функцию по алгоритму, она так же неправильно работает.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. void q_sort(int *numbers, int left, int right) {
  5. int pivot, l_hold, r_hold;
  6. l_hold = left;
  7. r_hold = right;
  8. pivot = numbers[left];
  9. while (left < right) {
  10. while ((numbers[right] >= pivot) && (left < right))
  11. right--;
  12. if (left != right) {
  13. numbers[left] = numbers[right];
  14. left++;
  15. }
  16. while ((numbers[left] <= pivot) && (left < right))
  17. left++;
  18. if (left != right) {
  19. numbers[right] = numbers[left];
  20. right--;
  21. }
  22. }
  23. numbers[left] = pivot;
  24. pivot = left;
  25. left = l_hold;
  26. right = r_hold;
  27. if (left < pivot)
  28. q_sort(numbers, left, pivot-1);
  29. if (right > pivot)
  30. q_sort(numbers, pivot+1, right);
  31. }
  32. int main() {
  33. int n, i,j;
  34. setlocale(LC_ALL,"Russian");
  35. printf("Введите количество элементов: ");
  36. scanf("%d",&n);
  37. float a[n];
  38. for (i=0;i<n;i++){
  39. scanf("%f",&a[i]);
  40. }
  41. q_sort(a,0,n-1);
  42. for(i=0;i<n;i++)
  43. printf("%.2f ",a[i]);
  44. return(0);
  45. }
Что я делаю не так?(

Решение задачи: «Неправильно работает qsort с отрицательными числами»

textual
Листинг программы
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. int qss_cmp_int_dec(void* null, const void* x, const void* y);
  5. int qss_cmp_int_inc(void* null, const void* x, const void* y);
  6.  
  7. void main() {
  8.     srand((size_t)time(0));
  9.     const size_t Len = 10; int Arr[Len];
  10.     for (int i = 0; i < Len; ++i) Arr[i] = rand() % 101 - 50;
  11.  
  12.     for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts("");
  13.  
  14.     qsort_s(Arr, Len, sizeof(int), qss_cmp_int_dec, 0);
  15.  
  16.     for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts("");
  17.  
  18.     qsort_s(Arr, Len, sizeof(int), qss_cmp_int_inc, 0);
  19.  
  20.     for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts("");
  21.  
  22.     system("pause");
  23. }
  24.  
  25. // по убыванию
  26. int qss_cmp_int_dec(void* null, const void* x, const void* y) {
  27.     return (*(int*)y - *(int*)x);
  28. }
  29.  
  30. // по возрастанию
  31. int qss_cmp_int_inc(void* null, const void* x, const void* y) {
  32.     return (*(int*)x - *(int*)y);
  33. }

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с функцией сортировки и генерацией случайных чисел
  2. Объявление двух функций сравнения для сортировки массива по убыванию и возрастанию
  3. Создание массива из 10 элементов сгенерированных случайным образом в диапазоне от -50 до 50
  4. Вывод содержимого массива на экран
  5. Сортировка массива в порядке убывания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_dec
  6. Вывод отсортированного массива на экран
  7. Сортировка массива в порядке возрастания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_inc
  8. Вывод отсортированного массива на экран
  9. Ожидание нажатия клавиши для завершения работы программы
  10. Объявление функции main()
  11. Инициализация генератора случайных чисел
  12. Определение размера массива и инициализация его элементов
  13. Генерация случайных чисел в указанном диапазоне и заполнение ими массива
  14. Вывод содержимого массива на экран
  15. Сортировка массива в порядке убывания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_dec
  16. Вывод отсортированного массива на экран
  17. Сортировка массива в порядке возрастания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_inc
  18. Вывод отсортированного массива на экран
  19. Ожидание нажатия клавиши для завершения работы программы
  20. Завершение работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы