贪心算法其实很简单,但是在此之前要先学习sort排序
sort排序
sort是个系统函数,是系统自带的一个快速排序,其使用方便……(可能有些考试不让用,需要自己打,但是我这里只说一下sort快排,毕竟我不会自己写快排)
数组排序使用sort
比如你的数组里已经有了一些数(未排序的),用sort是这样的
从小到大
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,a[105];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
}
注意:sort里第一个是:数组名加上第一个数的在数组里的位置(如果是从0开始输入的,那就啥也不用加)sort里第二个是:数组名加上最后一个数在数组里的位置(数组都从0开始!好好想想)
那从大到小排呢?
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b; //告诉计算机这样排是对的,从大到小排
}
int main(){
int n,a[105];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1,cmp); //cmp是个bool类型的函数,是用来告诉计算机咋样排
}
结构体使用sort
结构体定义及使用(科普):
struct 结构体声明名{
此结构体内的变量;
}最好是数组(直接定义号结构体);
列如:
#include <bits/stdc++.h>
using namespace std;
struct Student{
int chengji,age;
bool xingbie;
}a[105];
int main(){
int n;
for(int i=1;i<=n;i++){
cin>>a[i].chengji>>a[i].age>>a[i].xingbie;
}
for(int i=1;i<=n;i++){
cout<<a[i].chengji<<" "<<a[i].age<<" "<<a[i].xingbie<<endl;
}
return 0;
}
结构体不管从大到小还是从小到大,都需要cmp!(因为计算机想知道你要按结构体中那个变量来排)所以cmp的格式如下:(假设按成绩排)
#include <bits/stdc++.h>
using namespace std;
struct Student{
int chengji,age;
bool xingbie;
}a[105];
bool cmp(Student x,Student y){
return x.chengji>y.chengji; //前面写小于也行,那就是从小到大排(但必须写cmp)
}
int main(){
int n;
for(int i=1;i<=n;i++){
cin>>a[i].chengji>>a[i].age>>a[i].xingbie;
}
sort(a+1,a+n+a,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].chengji<<" "<<a[i].age<<" "<<a[i].xingbie<<endl;
}
return 0;
}
于是发现你的成绩就排好了
以上是快速排序sort,时间复杂度非常低(比桶排快)