经典例题:判断给定数组是否已经排好序

判断给定数组是否已经排好序

输入纯数字、纯大写字母、纯小写字母或者其三者的混合,若为纯数字序列,则按数字大小顺序判断,若为混合序列,则按ASCII表的顺序大小判断。
例如:
输入:1 3 a b A
输出:flase
输入:1 2 3 3 3
输出:true


```cpp
#include<bits/stdc++.h>     //C++万能头文件,但可能会降低速度,部分编译器不支持
using namespace std;

int main(){
    string num;
	vector<string>a;                //vector实现动态数组
	             
	while(1){
        cin>>num;
        a.push_back(num);           //将读入的num存在a数组中
		if(cin.get()=='\n') break;         //实现在未知大小的情况下,录入到换行符为结束
	}
	//cout<<a.back();               //会读取最后一个数
	//int n=a.size();               //会读取a数组的长度(注意不是下标)
	int j=0,length=a.size();
    while(j<length-1&&(a[j].compare(a[j+1])==0)) j++;      //排除元素全相同,或者元素开头存在相同的情况
	if(length<=1||j==length-1){                         //数组中只有一个元素或者元素全相同,则返回true
        cout<<"true";
        return 0;
	}
	
	else j=a[j].compare(a[j+1]);                    //在排除前面元素相同的基础上,比较当前元素与下一元素的结果
	for(int i=1;i<length-1;i++){
        if((a[i].compare(a[i+1]))*j<0){           //从第二个元素开始比较,乘积存在负数即为存在反序,否则为正序

            cout<<"false";
            return 0;
        }
	}
	
	cout<<"true";                       //没有退出程序,即为排好序
    return 0;
}

学习心得:
1.特别要注意:
a.push_back(num); if(cin.get()==’\n’) break;这两句的顺序问题,一定要先存入再判断是否为换行符,否则最后一个数据将无法输入。
2.在进行数据排序判断时,不可以将第一个与第二个值的结果记下来去跟后面的判断,否则可能因为前两个数据相同返回的值为0导致后面的无法判断,所以必须通过while循环将可能前几个相同的数据剔除。
3.f后面的for循环从1开始和从当前元素的下一个开始均可,只不过程序运行次数和写法繁简度不同。
4.记住vector可以作为动态数组使用,可解决没有给定长度的情况。
a.back(): 求最后一个元素
a.size(): 求动态数组的长度

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值