Какие есть самые лучшие алгоритмы сортировки, самые быстрые? - C (СИ)
Формулировка задачи:
Подскажите пожалуйста, какие есть самые лучшие алгоритмы сортировки, самые быстрые.
Например есть одномерный массив чисел, как его быстро отсортировать?
Или например есть одномерный массив символов, как его быстро отсортировать по убыванию или наоборот?
Если можете, напишите код на Си, как пример. Заранее спасибо.
Решение задачи: «Какие есть самые лучшие алгоритмы сортировки, самые быстрые?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define SIZE 100 // размер выделения памяти void init(int[], int); int compareASC(const void*, const void*); int compareDESC(const void*, const void*); void print(int[], int); int main() { int *p = (int*) malloc(SIZE * sizeof(int)); // выделяем память if(p == NULL) { // если память не может выделиться printf("Error! No free memory!"); system("pause"); exit(0); } // заполняем массив значениями init(p, SIZE); // сортируем qsort(p, SIZE, sizeof(int), compareASC); //qsort(p, SIZE, sizeof(int), compareDESC); - сортировка в обратном порядке // выводим массив print(p, SIZE); // после использования памяти освождаем её free(p); p = NULL; system("pause"); return 0; } void init(int arr[], int len) { int i; for(i = 0; i < len; i++) arr[i] = rand(); // заполняем случайными числами } int compareASC(const void *p1, const void *p2) { int n1 = *(int*)p1; int n2 = *(int*)p2; if(n1 < n2) return -1; if(n1 == n2) return 0; else return 1; } int compareDESC(const void *p1, const void *p2) { return -compareASC(p1, p2); } void print(int arr[], int len) { int i; for(i = 0; i < len; i++) { printf("%d\n", arr[i]); } }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
и . - Определяем размер массива в 100 элементов.
- Объявляем функции: init(), compareASC(), compareDESC(), print().
- В функции main() выделяем память под массив и проверяем её наличие.
- Заполняем массив случайными числами с помощью функции init().
- Сортируем массив с помощью функции qsort() используя функцию сравнения compareASC() для сортировки по возрастанию и compareDESC() для сортировки по убыванию.
- Выводим отсортированный массив с помощью функции print().
- Освобождаем память с помощью функции free().
- В функции init() перебираем массив и заполняем его случайными числами.
- В функции compareASC() сравниваем числа и возвращаем результат сравнения.
- В функции compareDESC() используем функцию compareASC() для получения результата и возвращаем его с отрицательным знаком.
- В функции print() перебираем массив и выводим его элементы на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д