判断给定数组是否已经排好序
输入纯数字、纯大写字母、纯小写字母或者其三者的混合,若为纯数字序列,则按数字大小顺序判断,若为混合序列,则按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(): 求动态数组的长度