Сортировка массива в C++ встречается довольно часто. Существует много функций, позволяющих массив отсортировать, то есть расположить все элементы массива по возрастанию или убыванию. Остановимся на встроенных в C++ функциях qsort и std::sort. Важно заметить, что можно реализовать и использовать и другие самые разнообразные функции для сортировки массива.
Первая из интересующих нас функций qsort библиотеки stdlib.h:
1 |
qsort (<сортируемый массив>, <количество элементов>, sizeof(<тип элемента>), <функция для сравнения>); |
Функция для сравнения - наиболее своеобразная часть кода. Она выглядит примерно таким образом:
1 2 3 4 5 |
//функция для сортировки по возрастанию int comp1 (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } |
Тип данных int для массива другого типа можно заменить на другой.
Функция qsort изменяет порядок элементов в исходном массиве. Полный пример её использования выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <stdlib.h> // подключаем qsort #include <iostream> // подключаем cout //функция для сортировки по возрастанию int comp1 (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } //функция для сортировки по убыванию int comp2 (const void * a, const void * b) { return ( *(int*)b - *(int*)a ); } using namespace std; // чтобы не подключать std int main () { int sort_int_array[] = { 13, 12, 43, 91, 30, 15, 74, 14 }; int i;//счётчик //сортировка по возрастанию qsort (sort_int_array, 8, sizeof(int), comp1); //12, 13, 14, 15, 30, 43, 74, 91 //ввывод результатов на экран for(i=0; i<8; i++) cout<<sort_int_array[i]<<" "; cout<<"\n"; //сортировка по убыванию qsort (sort_int_array, 8, sizeof(int), comp2);//91, 74, 43, 30, 15, 14, 13, 12 //ввывод результатов на экран for(i=0; i<8; i++) cout<<sort_int_array[i]<<" "; cout<<"\n"; system("pause"); } |
Тоже самое можно проделать и с помощью другой функции std::sort, которая находится в библиотеке algorithm из stl:
1 |
sort (<итератор начала сортировки>, <итератор конца сортировки>, <функция для сравнения>); |
можно и без последнего параметра, тогда сравнение будет по возрастанию:
1 |
sort (<итератор начала сортировки>, <итератор конца сортировки>); |
Для использования этой функции массив нужно предварительно преобразовать в vector.
Затем уместно использовать итераторы начала и конца полученного вектора
1 |
sort_int_vector.begin(), sort_int_vector.end() |
для указания начала и конца сортируемой части массива.
Функция для сравнения на сей раз довольно простая. А полный пример использования выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <iostream> // подключаем cout #include <algorithm> // подключаем sort #include <vector> // подключаем vector using namespace std; // чтобы не писать std:: bool comp2 (int a,int b) { return (a>b); } int main () { int sort_int_array[] = {5,74,11,65,77,84,13,53}; vector<int> sort_int_vector (sort_int_array, sort_int_array+8); // 5,74,11,65,77,84,13,53 int i; //ввывод первоначального массива на экран for(i=0;i<8;i++) cout<<sort_int_vector[i]<<" "; cout<<"\n"; // сортировка по умолчанию, по возрастанию sort (sort_int_vector.begin(), sort_int_vector.end()); // 5,11,13,53,65,74,77,84 //ввывод результатов на экран for(i=0;i<8;i++) cout<<sort_int_vector[i]<<" "; cout<<"\n"; // сортировка по убыванию sort (sort_int_vector.begin(), sort_int_vector.end(), comp2); // 84, 77, 74, 65, 53, 13, 11, 5 //ввывод результатов на экран for(i=0;i<8;i++) cout<<sort_int_vector[i]<<" "; cout<<"\n"; system("pause"); } |