sort()以及折半查找

行路难,行路难,多歧路,今安在?
长风破浪会有时,直挂云帆济沧海。

sort()

Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,
还可以不写第三个参数,此时默认的排序方法是从小到大排序。

例1:int类型

int a[10]={9,6,3,8,5,2,7,4,1,0};
sort(a,a+10);
输出:0 1 2 3 4 5 6 7 8 9

如果想降序排列数组的话
bool complare(int a,int b){
return a>b;
}
int a[10]={9,6,3,8,5,2,7,4,1,0};
sort(a,a+10,complare);
输出:9 8 7 6 5 4 3 2 1 0

还有更简便的方法:
less<数据类型>() //从小到大排序
greater<数据类型>() //从大到小排序

例2:字符类型

sort()功能强大,可以排序一个字符串内的字符,也可以排序字符串与字符串
字符串内:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

int main()
{
    string s;
    cin>>s;
    sort(s.begin(),s.end());///从小到大
    cout<<s<<endl;
    sort(s.begin(),s.end(),greater<char>());///从大到小
    cout<<s<<endl;
    cout<<s.length()<<endl;///字符串长度函数
}

字符串间:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;

bool cmp(string a,string b)///按照字典序从大到小排序
{
    return a>b;
}

bool cmp1(string a,string b)///按照长度从小到大排序
{
    return a.length()<b.length();
}

int main()
{
    int i,j;
    string  s[12]=
    {
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
    };

    sort(s,s+12);//字符串默认按照字典序从小到大排序,数默认按照大小从小到大排序
    for(i=0;i<12;i++)
        cout<<s[i]<<endl;
    cout<<endl;

    sort(s,s+12,cmp);//按照字典序从大到小排序
    for(i=0;i<12;i++)
        cout<<s[i]<<endl;
    cout<<endl;

    sort(s,s+12,cmp1);//按照字符串长度排序
    for(i=0;i<12;i++)
        cout<<s[i]<<endl;

  return 0;
}

运行结果:
在这里插入图片描述
还有一种就是根据结构体中的某一项来排序:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int n=3;
struct Student
{
        char name[20];///姓名
        char id[20]; ///学号
        int score;  ///成绩
        int r;          ///排名
}stu[100010];
/*
(1)如果两个学生的分数不同,则分数高的排在前面
(2)否则,将姓名字典序小的排在前面
*/
bool cmp(Student a,Student b)
{
    if(a.score!=b.score) return a.score>b.score;
    else return strcmp(a.name,b.name)<0;
}

/*
排名的实现,一般规则为:分数不同,排名不同,分数相同排名相同但占用同一个排位
例如:分数为90,88,88,88,86;排名为1,2,2,2,5
*/
void Rank()
{
    int i,j;
    stu[0].r=1;
    for(i=1;i<n;i++)
    {
        if(stu[i].score==stu[i-1].score) stu[i].r=stu[i-1].r;
        else stu[i].r=i+1;
    }
}
int main()
{
    int i,j;
    stu[0]=(Student){"guo","001",82,3};
    stu[1]=(Student){"zhang","002",82,3};
    stu[2]=(Student){"wu","003",99,2};
    sort(stu,stu+n,cmp);
    for(i=0;i<n;i++)
        cout<<stu[i].id<<" "<<stu[i].name<<" "<<stu[i].r<<" "<<stu[i].score<<endl;
}

运行结果:
在这里插入图片描述
以上转载于此处,并有一些修改,非常感谢作者大大
https://blog.csdn.net/Grady_Ne/article/details/100813660

折半查找

自己写的折半查找,可以找到第一个想要的值,没找到返回-1


#include<iostream>
#include<algorithm>
using namespace std;

int a[20000];
int zheban(int u,int n)
{
    int low=0,high=n,mid;
    int s=0;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(a[mid]>u)
        {
            high=mid-1;
        }
        if(a[mid]<u)
        {
            low=mid+1;
        }
        if(a[mid]==u)//rxjyyds!
        {
            high=mid-1;
            s=1;
        }
    }
    if(s==1)
        return low+1;
    else
        return -1;
}

int main()
{
    int n,i,u;
    int ans;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    cin>>u;
    sort(a,a+n);
    ans=zheban(u,n);
    cout<<ans<<endl;
    return 0;
}

rxjyyds!,如果直接return mid就只能是其中一个而不是第一个了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值