struct (类型名){
类型1 变量1;
类型2 变量2;
}[结构体变量名];
struct 类型名 结构体变量名;//可以不加
struct student{
int chinese,math;
};
struct student a[100];

拓展

sort()

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);

对结构体中某变量进行排序,其他变量会跟随移动