struct (类型名){
类型1 变量1;
类型2 变量2;
}[结构体变量名];
struct 类型名 结构体变量名;//可以不加
struct student{
int chinese,math;
};
struct student a[100];
sort(start_address, end_address, [rule])
我们在使用简单的对数组元素或是字符串排序的时候,第三个参数往往是省略的,代表你的排序规则默认是从小到大排序,当然也可以带参数,那么就可以通过用系统的排序规则sort(a,a+7,less<int>();实现从小到大排序,或者是使用sort(a,a+7,greater<int>());用系统的排序规则,从大到小排序。
STL的sort()算法,数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个阈值,为避免Quick Sort的递归调用带来过大的额外开销,就改用Insertion Sort(插入排序)。如果递归层次过深,还会改用Heap Sort。它并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。
快速排序最关键的地方在于枢轴的选择,最坏的情况发生在分割时产生了一个空的区间,这样就完全没有达到分割的效果。STL采用的做法称为median-of-three,即取整个序列的首、尾、中央三个地方的元素,以其中值作为枢轴。
exp:
struct stu
{
int num;
int c,m,e;
int sum;
}student[310];
bool cmp(stu a,stu b)
{
if(a.sum>b.sum) return 1;
else if(a.sum<b.sum) return 0;
else
{
if(a.c>b.c) return 1;
else if(a.c<b.c) return 0;
else
{
if(a.num>b.num) return 0;
else return 1;
}
}
}
sort(a,a+n,cmp);
对结构体中某变量进行排序,其他变量会跟随移动