1.排序
使用algorithm头文件中的sort函数,本质为快速排序,默认升序排列。想要进行降序排列或根据某个数值类型进行排列,可以使用自定义的结构体+自定义的比较函数
//想对学生成绩进行降序排列
struct Student
{
int number;
int score;
};
Student s[MAXN];
bool cmp(Student s1,Student s2)
{
return s1.score>s2.score;
}
sort(s,s+n,cmp);
注:当涉及相同元素按输入顺序排序时,就要利用排序算法的稳定性,使用stable_sort( )函数,头文件不变
例题:字符串排序
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
struct ch
{
char data;
int no;
}a[1000];
bool cmp(ch x,ch y)
{
if(x.data>=65&&x.data<=90&&y.data>=65&&y.data<=90)//都是大写
return x.data<y.data;
else if(x.data>=97&&x.data<=122&&y.data>=97&&y.data<=122)//都是小写
return x.data<y.data;
else if(x.data<y.data)//一大写,一小写
return (x.data-'A')<(y.data-'a');
else if(x.data>y.data)
return (x.data-'a')<(y.data-'A');
}
int main()
{
string str;
while(getline(cin,str))
{
//初始化
int n=str.size();
int index=0;
for(int i=0;i<n;++i)
{
if((str[i]>=65&&str[i]<=90)||(str[i]>=97&&str[i]<=122))
{
a[index].data=str[i];
a[index].no=i;
index++;
}
}
//稳定排序
stable_sort(a,a+index,cmp);
//复原字符串
for(int i=0,j=0;i<n;++i)
{
if((str[i]>=65&&str[i]<=90)||(str[i]>=97&&str[i]<=122))
{
str[i]=a[j].data;
j++;
}
}
cout<<str<<endl;
}
return 0;
}
2.查找
2.1二分查找
当数据量和查找次数过大时,不能用遍历的方式,而应使用二分查找
int arr[MAXN];
bool Binary(int n,int target)//n为查找范围,target为查找目标
{
int left=0;
int right=n-1;
while(left<=right)
{
int mid=(left+right)/2;
if(arr[mid]<target)
left=mid+1;
else if(arr[mid]>target)
right=mid-1;
else
return true;//查找成功
}
return false;//查找失败
}