Предыдущий пост -

Функция sort().

Рубрика: C++, Дата: 5 April, 2013, Автор:
Tags:

Здорова господа!

Опять меня постигло разочарование. Я на отрез не знаю, что такое функция sort() и как ее использовать. Так что сейчас будем разбираться с нуля, что это такое и как его используют, то есть ее. 🙂

И так начнем с определения. Что такое функция sort()? Да с определением как оказалось очень не просто. Потом к нему вернемся. А пока давайте разберем, что нужно подключить, чтобы начать использовать функцию?  Нужно подключить заголовочный файл algorithm. Зделать #include <algorithm>.

#include <algorithm>
using sort;

Я отак прописал и у меня ошибок при компиляции не возникло.

Теперь давайте попробуем разобраться с параметрами функции. Функция принимает вроде как два параметра. sort(). Да чуточку я ошибся функция как окозалось принимает три параметра, третий это функция.

sort(first, last, funk); , где:

  • first-это указатель на первый элемент.
  • second-это указатель на последний элемент.
  • funk-это функция которая будет вызыватся в зависимости от сортировки, то есть порядка сортировки.

Теперь давайте попробуем составить примерчик с использованием данной функции.  Будем использовать контейнер вектор, так как функция сортирует токо контейнеры стл.

Приведем пример:

#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
#include <algorithm>
using std::sort;
#include <cstdlib>
using std::rand;
using std::srand;
#include <ctime>
using std::time;

int funk(int a, int b)
{
	return a-b;
}

int main()
{
	vector<int> vec;
	srand(time(0));
	for(int i=0;i<20;i++)
		vec.push_back(1+rand()%100);
	for(int i=0;i<vec.size();i++)
		cout <<vec[i]<<' ';
	cout <<endl;

	//cortirovka v por9dke ot men6wego k bol6wemy
	sort(vec.begin(),vec.end());

	for(int i=0;i<vec.size();i++)
		cout <<vec[i]<<' ';
	cout <<endl;

	//cortirovka ot bol6wego k men6wemy
	sort(vec.rbegin(),vec.rend());

	for(int i=0;i<vec.size();i++)
		cout <<vec[i]<<' ';
	cout <<endl;

	//cortirovka chiclovogo macciva
	cout <<"cortirovka int mass[10]"<<endl;
	int mass[10];
	for(int i=0;i<10;i++)
	{
		mass[i]=1+rand()%100;
	}
	for(int i=0;i<10;i++)
	{
		cout <<mass[i]<<' ';
	}
	cout <<endl;

	sort(mass, mass+10);

	for(int i=0;i<10;i++)
	{
		cout <<mass[i]<<' ';
	}
	cout <<endl;

	sort(mass, mass+10, funk);

	for(int i=0;i<10;i++)
	{
		cout <<mass[i]<<' ';
	}
	cout <<endl;

	return 0;
}

По примеру видно, что для контейнеров стл третий параметр нельзя задать. Сортировка в обратном и прямом порядке осуществляется с помощью обратных и прямых итераторов begin() end() и rbegin() rend().

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

[youtube]http://www.youtube.com/watch?v=h3YJNmhSpkE[/youtube]

rss