Как отсортировать вектор x по убыванию

от admin

Сортировать vector в порядке убывания в C++

В этом посте мы обсудим, как сортировать vector в порядке убывания в C++.

1. Используйте std::sort (или же std::stable_sort )

Эффективным решением является использование std::sort алгоритм, определенный в <algorithm> заголовок. Обычно это высокоэффективная реализация Алгоритм интросортировки, который начинается с быстрая сортировка и переключается на сортировка кучей когда рекурсия идет слишком глубоко.

The std::sort алгоритм не поддерживает относительный порядок равных элементов. Чтобы получить стабильную сортировку, используйте std::stable_sort , который использует Сортировка слиянием алгоритм.

Версия с двумя аргументами std::sort алгоритм сортирует vector в порядке возрастания, используя operator< . Чтобы получить порядок убывания, позвоните по номеру std::reverse после std::sort .

Как отсортировать вектор x по убыванию

How to sort in descending order?
sort() takes a third parameter that is used to specify the order in which elements are to be sorted. We can pass “greater()” function to sort in descending order. This function does comparison in a way that puts greater elements before.

How to sort in a particular order?
We can also write our own comparator function and pass it as a third parameter.

The comparator function checks, if the statement returned, is true or false and returns a bool value which is passed to the sort function.

For example, lets say Interval i1 = < 6 , 8 >and Interval i2 = < 1, 9 >. When this is passed to the comparator function, it compares i1.start and i2.start. Since, i1.start (=6) < i2.start (=1), the comparator function returns false. This means that Interval i1 should not be placed before Interval i2. Below is the code for this function.

Sorting a vector in descending order

to sort a vector in descending order? Are there any benefits or drawbacks with one approach or the other?

11 Answers 11

Actually, the first one is a bad idea. Use either the second one, or this:

That way your code won’t silently break when someone decides numbers should hold long or long long instead of int .

With c++14 you can do this:

It’s explicit of what’s going on — less chance of misreading rbegin as begin , even with a comment. It’s clear and readable which is exactly what you want.

Also, the second one may be less efficient than the first given the nature of reverse iterators, although you would have to profile it to be sure.

What about this?

Instead of a functor as Mehrdad proposed, you could use a Lambda function.

Julian Declercq's user avatar

According to my machine, sorting a long long vector of [1..3000000] using the first method takes around 4 seconds, while using the second takes about twice the time. That says something, obviously, but I don’t understand why either. Just think this would be helpful.

Отсортировать элементы вектора по убыванию

Как отсортировать вектор в порядке убывания, используя STL в C ++?

По заданному вектору отсортируйте этот вектор в порядке убывания, используя STL в C ++.

Подход: сортировку можно выполнить с помощью функции sort (), представленной в STL.

// C ++ программа для сортировки Vector
// в порядке убывания
// используя sort () в STL

using namespace std;

for ( int i = 0; i

// сортируем вектор по убыванию

sort(a.begin(), a.end(), greater int >());

// Распечатать обратный вектор

cout «Sorted Vector in descendiing order:n» ;

алгоритм сортировки (упорядочивания) элементов вектора или матрицы

Сортировка означает перестановку элементов вектора или матрицы в определенном порядке (по возрастанию или по убыванию) в соответствии с их значениями.

Рассмотрим алгоритм сортировки (упорядочивания) элементов вектора, когда значение каждого последующего элемента вектора больше предыдущего. Например, пусть исходный вектор X= 6=(3, 4, 2, -1, 6, 0), тогда в результате сортировки получим вектор X=(-1, 0, 2, 3, 4, 6).

Существуют различные способы решения данной задачи. Рассмотрим один из них.

Процедура сортировки элементов вектора Xпо возрастанию их значенийследующая.

Первый шаг

Среди N-1 элементов вектора X(за исключением ) произведем поиск минимального элемента вектора и поменяем его местами с первым элементом, если значение » на знак »

Вычисление полинома по схеме горнера

y = PN(x)= ( 18 )

Порядок N, значение аргумента и коэффициенты ( ) известны. Поставим задачу разработки эффективной схемы вычисления полинома y = PN( ).

Представим уравнение (18) в следующем виде:

( 19 )

Очевидно, уравнение Горнера (19) предполагает меньший объем арифметических операций, чем исходное уравнение (18).

Рассмотрим следующую процедуру вычисления полинома с использованием рекуррентной формулы (рис. 24):

,

для . ( 20 )

для

для ( 21 )

для =PN( )

Рис.24. Алгоритм вычисления полинома по схеме Горнера.

ВЫЧИСЛЕНИЕ СУММЫ ЧЛЕНОВ РЯДА

Вычисление суммы членов ряда рассмотрим на примере тригонометрической функции . Известно, что данная функция может быть представлена разложением в следующий ряд:

, ( 22 )

где — общий член ряда.

Очевидно, сумма членов ряда S может быть вычислена только при конечном (заданном) числе членов ряда, предположим NZ = 10, или условием окончания вычислений может быть неравенство вида , где достаточно малая величина, предположим или . (Известно, что в сходящихся рядах , т.e. значение модуля каждого последующего члена ряда меньше предыдущего).

Приведем рекуррентную формулу для вычисления значения текущего члена ряда:

, где — рекуррентный множитель. ( 23 )

Для нашего примера (уравнение 22)

M= = . (24)

Покажем схему алгоритма вычисления суммы членов ряда на рис. 25.

Сортировка векторов C++

Вектор C ++ подобен массиву с функциями-членами (методами). Длина вектора может быть увеличена или уменьшена в процессе выполнения программы. Вектор имеет множество функций-членов. Среди всех этих функций-членов не сортирует вектор. Однако в C ++ есть библиотека, называемая библиотекой алгоритмов. В этой библиотеке есть много универсальных алгоритмических функций. Одна из них — функция sort (). Эта функция может использоваться для сортировки контейнеров C ++, таких как вектор. Все значения вектора являются значениями одного типа.

Программист может написать свою собственную функцию sort (). Однако функция sort () из библиотеки алгоритмов, вероятно, будет работать лучше, чем то, что пишет обычный программист.

Функция sort () может сортировать значения вектора в порядке возрастания или убывания. Для сортировки вектора должна быть включена библиотека алгоритмов. Также должна быть включена векторная библиотека. Начало программы должно быть примерно таким:

using namespace std ;

Вектор на самом деле является классом, из которого могут быть созданы векторные объекты. С помощью приведенного выше верхнего раздела программы вектор для сортировки может быть создан следующим образом:

Имя класса — вектор. Имя созданного объекта — vtr.

В этом руководстве кодирование сортировки выполняется с помощью функции C ++ main (). В этом руководстве объясняется, как отсортировать вектор C ++ с использованием указанного выше вектора vtr.

Сортировка по умолчанию

Сортировка по умолчанию выполняется в порядке возрастания. Синтаксис для этого:

template class RandomAccessIterator >

void sort ( RandomAccessIterator first , RandomAccessIterator last ) ;

Сортировка всего вектора

Следующий код сортирует весь вектор:

for ( int i = ; i vtr. size ( ) ; i ++ )

Если сортировка некорректна, значит, виноват программист, а не функция sort ().

RandomAccessIterator является внутренним. vtr.begin () возвращает итератор, указывающий на первый элемент, а vtr.end () возвращает другой итератор того же типа, который указывает сразу после последнего элемента. Таким образом, нет необходимости создавать экземпляр вектора, указывающего RandomAccessIterator. Таким образом сортируется весь список.

Сортировка диапазона по возрастанию

Несортированный список выше состоит из десяти элементов с индексами:

Чтобы отсортировать только элементы из позиции 4, которая является индексом, 3 = 4-1, до позиции 9, которая является индексом, 8 = 9-1, добавьте 3 к vtr.begin (), чтобы получить первый итератор, а затем добавьте 8 в vtr.begin (), чтобы иметь последний итератор для функции sort (). 9- й элемент индекса 8 не будет включен в сортировку. То есть последний элемент, указанный в выбранном диапазоне, исключается из сортировки. Следующий код иллюстрирует это:

sort ( vtr. begin ( ) + 3 , vtr. begin ( ) + 8 ) ;

for ( int i = ; i vtr. size ( ) ; i ++ )

Z, X, C, V, B, N, M, A, S, D
[/c]c
The sorted list is:
[cc lang=»text» width=»100%» height=»100%» escaped=»true» theme=»blackboard» nowrap=»0″]
Z, X, C, A, B, M, N, V, S, D,

Элементы в позициях 4, 5, 6, 7, 8 отсортированы. Элемент на 9 — е позиции не был включен в этом роде. Эти позиции соответствуют индексам 3, 4, 5, 6, 7. Элемент с индексом 8 не был включен в сортировку.

Итак, чтобы отсортировать диапазон, определите первый и последний элементы в диапазоне, не обязательно всего списка. Добавьте индекс первого элемента в итератор begin (). Добавьте индекс последнего элемента в итератор begin (). Помните, что последний элемент диапазона не будет включен в сортировку, но будет включен первый элемент диапазона.

Добавление индекса к итератору возможно, потому что добавление числа равносильно увеличению итератора на такое же количество раз. При однократном увеличении итератора он указывает на следующий элемент.

Сортировка по убыванию

template class RandomAccessIterator , class Compare >

void sort ( RandomAccessIterator first , RandomAccessIterator last , Compare comp ) ;
[ / c ]
This differs from the above syntax with the presence of “Compare comp”. comp is a function pointer or a function object. comp actually decides whether the sorting should be ascending or descending. Its absence is the default case , which means descending.
h3 > Sorting the Whole List in Descending Order h3 >
The following code sorts the whole above vector in descending order :
[ cc lang = «c» width = «100%» height = «100%» escaped = «true» theme = «blackboard» nowrap = «0» ]
sort ( vtr. begin ( ) , vtr. end ( ) , greater char > ( ) ) ;

Читать:
Maximum number of rss queues что это

Похожие статьи