我们已经在C中讨论了qsort()。C++ STL提供了类似的函数排序,可以对向量或数组(具有随机访问权限的项)进行排序。
通常需要两个参数,第一个参数是需要从其开始排序的数组/向量的点,第二个参数是我们希望对数组/向量进行排序的长度。第三个参数是可选的,可以在诸如我们要按字典顺序对元素进行排序的情况下使用。
默认情况下,sort()函数以升序对元素进行排序。
下面是一个简单的程序,用于显示sort()的工作方式。
CPP
// C++ program to demonstrate default behaviour of
// sort() in STL.
#include
using namespace std;
int main()
{
int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
int n = sizeof(arr) / sizeof(arr[0]);
/*Here we take two parameters, the beginning of the
array and the length n upto which we want the array to
be sorted*/
sort(arr, arr + n);
cout << "\nArray after sorting using "
"default sort is : \n";
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
return 0;
}
CPP
// C++ program to demonstrate descending order sort using
// greater<>().
#include
using namespace std;
int main()
{
int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n, greater());
cout << "Array after sorting : \n";
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
return 0;
}
CPP
// A C++ program to demonstrate
// STL sort() using
// our own comparator
#include
using namespace std;
// An interval has a start
// time and end time
struct Interval {
int start, end;
};
// Compares two intervals
// according to staring times.
bool compareInterval(Interval i1, Interval i2)
{
return (i1.start < i2.start);
}
int main()
{
Interval arr[]
= { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } };
int n = sizeof(arr) / sizeof(arr[0]);
// sort the intervals in increasing order of
// start time
sort(arr, arr + n, compareInterval);
cout << "Intervals sorted by start time : \n";
for (int i = 0; i < n; i++)
cout << "[" << arr[i].start << "," << arr[i].end
<< "] ";
return 0;
}
输出 :
Array after sorting using default sort is :
0 1 2 3 4 5 6 7 8 9
如何按降序排序?
sort()采用第三个参数,该参数用于指定元素的排序顺序。我们可以传递“ greater()”函数以降序排列。此函数进行比较的方式是将更大的元素放在前面。
CPP
// C++ program to demonstrate descending order sort using
// greater<>().
#include
using namespace std;
int main()
{
int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n, greater());
cout << "Array after sorting : \n";
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
return 0;
}
输出:
Array after sorting :
9 8 7 6 5 4 3 2 1 0
如何按特定顺序排序?
我们还可以编写自己的比较器函数并将其作为第三个参数传递。这个“比较器”函数返回一个值;可转换为布尔值,基本上可以告诉我们是否应将传递的“第一个”参数放在传递的“第二个”参数之前。
例如:在下面的代码中,假设间隔{6,8}和{1,9}作为参数传递给“ compareInterval”函数(比较器函数)。现在,因为i1.first(= 6)> i2.first(= 1),所以我们的函数返回“ false”,这告诉我们不应将“ first”自变量放在“ second”自变量之前,因此将在其中进行排序先按{1,9}的顺序排列,然后再按{6,8}的顺序排列。
CPP
// A C++ program to demonstrate
// STL sort() using
// our own comparator
#include
using namespace std;
// An interval has a start
// time and end time
struct Interval {
int start, end;
};
// Compares two intervals
// according to staring times.
bool compareInterval(Interval i1, Interval i2)
{
return (i1.start < i2.start);
}
int main()
{
Interval arr[]
= { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } };
int n = sizeof(arr) / sizeof(arr[0]);
// sort the intervals in increasing order of
// start time
sort(arr, arr + n, compareInterval);
cout << "Intervals sorted by start time : \n";
for (int i = 0; i < n; i++)
cout << "[" << arr[i].start << "," << arr[i].end
<< "] ";
return 0;
}
输出:
Intervals sorted by start time :
[1,9] [2,4] [4,7] [6,8]
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。