我想知道我是否可以直接对文件中的一些数字进行运算,而不需要
我写这段代码是为了检查一个文件是否被排序,但是我必须读它们
然后检查这个向量是否排序过
代码可能效率不高,因为我必须做一些额外的步骤。代码如下:
//方法检查数字是否已排序:
bool number_sorted(vector <int> vector){
bool is_sorted = true;
for(int i = 0; i < vector.size(); i++){
for(int j = i + 1; j < vector.size(); j++){
if(vector[i] > vector[j]){
is_sorted = false;
cout << vector[i] << " and " << vector[j] << " are in the wrong order" << endl;
}
}
}
return is_sorted;
}
//方法对数字进行排序:
vector <int> sort(vector <int> vector){
for(int i = 0; i < vector.size(); i++){
for(int j = i + 1; j < vector.size(); j++){
if(vector[i] > vector[j]){
int temp = vector[i];
vector[i] = vector[j];
vector[j] = temp;
}
}
}
return vector;
}
//主方法:
int main(){
vector <int> list;
fstream fs;
fs.open("/Users/brah79/Downloads/skola/c++/inlämningsuppgiter/number1.txt");
bool is_sorted = number_sorted(list);
if(is_sorted){
cout << "the list of numbers is sorted" << endl;
}
else{
sort(list);
}
如您所见,所有操作都是先在向量上执行的,但我想进行检查,
直接整理文件希望我说的够清楚了
2条答案
按热度按时间vsaztqbk1#
您必须读取文件,没有其他方法。但您不必将所有内容都保存在
vector
中s4n0splo2#
让我们看看您的实现:
考虑每个元素
vector[i]
,然后检查所有j > i
的vector[i]
是否不大于vector[j]
。如果大于,则不对向量排序。如果没有遇到这样的元素对vector[i]
和vector[j]
,则对向量排序。如果这是检查一个数字序列是否排序的方法,那么是的,那么你需要内存中的所有数字。
在一个未排序的序列中,至少有一个索引
i
,其中如果任何一对相邻的元素被排序,那么整个序列也被排序。
您只需要将一个数字与下一个数字进行比较。您不需要存储所有元素来检查它们是否排序。当您从文件中读取时,记住前一个数字,读取下一个数字,并检查下一个数字是否大于或等于前一个数字。