Неправильно работает qsort с отрицательными числами - C (СИ)
Формулировка задачи:
Здравствуйте. При использовании функции qsort - программа неправильно сортирует отрицательные числа.
Например: "-40 -30 -20 -10 2 4 5 3" сортирует как "-10 -20 -30 -40 2 3 4 5". Написал свою функцию по алгоритму, она так же неправильно работает.
Что я делаю не так?(
#include <stdio.h> #include <stdlib.h> #include <locale.h> void q_sort(int *numbers, int left, int right) { int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbers[left]; while (left < right) { while ((numbers[right] >= pivot) && (left < right)) right--; if (left != right) { numbers[left] = numbers[right]; left++; } while ((numbers[left] <= pivot) && (left < right)) left++; if (left != right) { numbers[right] = numbers[left]; right--; } } numbers[left] = pivot; pivot = left; left = l_hold; right = r_hold; if (left < pivot) q_sort(numbers, left, pivot-1); if (right > pivot) q_sort(numbers, pivot+1, right); } int main() { int n, i,j; setlocale(LC_ALL,"Russian"); printf("Введите количество элементов: "); scanf("%d",&n); float a[n]; for (i=0;i<n;i++){ scanf("%f",&a[i]); } q_sort(a,0,n-1); for(i=0;i<n;i++) printf("%.2f ",a[i]); return(0); }
Решение задачи: «Неправильно работает qsort с отрицательными числами»
textual
Листинг программы
#include <iostream> #include <ctime> int qss_cmp_int_dec(void* null, const void* x, const void* y); int qss_cmp_int_inc(void* null, const void* x, const void* y); void main() { srand((size_t)time(0)); const size_t Len = 10; int Arr[Len]; for (int i = 0; i < Len; ++i) Arr[i] = rand() % 101 - 50; for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts(""); qsort_s(Arr, Len, sizeof(int), qss_cmp_int_dec, 0); for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts(""); qsort_s(Arr, Len, sizeof(int), qss_cmp_int_inc, 0); for (int i = 0; i < Len; ++i) printf("%d ", Arr[i]); puts(""); system("pause"); } // по убыванию int qss_cmp_int_dec(void* null, const void* x, const void* y) { return (*(int*)y - *(int*)x); } // по возрастанию int qss_cmp_int_inc(void* null, const void* x, const void* y) { return (*(int*)x - *(int*)y); }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с функцией сортировки и генерацией случайных чисел
- Объявление двух функций сравнения для сортировки массива по убыванию и возрастанию
- Создание массива из 10 элементов сгенерированных случайным образом в диапазоне от -50 до 50
- Вывод содержимого массива на экран
- Сортировка массива в порядке убывания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_dec
- Вывод отсортированного массива на экран
- Сортировка массива в порядке возрастания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_inc
- Вывод отсортированного массива на экран
- Ожидание нажатия клавиши для завершения работы программы
- Объявление функции main()
- Инициализация генератора случайных чисел
- Определение размера массива и инициализация его элементов
- Генерация случайных чисел в указанном диапазоне и заполнение ими массива
- Вывод содержимого массива на экран
- Сортировка массива в порядке убывания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_dec
- Вывод отсортированного массива на экран
- Сортировка массива в порядке возрастания с помощью функции qsort_s и передачей в нее функции сравнения qss_cmp_int_inc
- Вывод отсортированного массива на экран
- Ожидание нажатия клавиши для завершения работы программы
- Завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д