所以我在C ++方面只是一个笨拙的程序员,我必须编写一个函数来检查int数组是否使用指针排序(不允许使用索引符号),这是我到目前为止所拥有的: / p>
bool isSorted(const int *ar, int size) {
bool sorted = true;
const int *ptr1, *ptr2, *ptr3;
ptr1 = ar;
ptr2 = ar+1;
ptr3 = ar+size;
for (ptr1; ptr1 < ptr3; ptr1++) {
for (ptr2; ptr2 < ptr3; ptr2++) {
if (*ptr1 > *ptr2) {
sorted = false;
}
}
}
return sorted;
}
但是,我似乎无法让它工作,因为无论数组是否排序,它总是返回true。感谢任何帮助。谢谢。
答案 0 :(得分:3)
&#34;你越是疏忽管道,就越容易停下来 漏&#34; - Scotty,Star Trek III。
你使这变得比以前复杂得多。
问自己一个基本问题:什么是排序数组?
答案:一个数组,其中每个连续元素不小于其前一个元素。
因此:要检查数组是否已排序,只需查找小于其前一个元素的元素。如果找到一个,则不对数组进行排序。如果找不到,则必须对数组进行排序。
bool isSorted(const int *ar, int size) {
if (size == 0)
return true; // Edge case
int previous_value= *ar;
while (size)
{
if (*ar < previous_value)
return false;
previous_value= *ar;
++ar;
--size;
}
return true;
}
没有索引表示法,只有一个指针。不需要进行任何类型的嵌套搜索等...如果你只想使用指针,你可以这样做:
bool isSorted(const int *ar, int size) {
const int *previous_value=ar;
while (size)
{
if (*ar < *previous_value)
return false;
previous_value= ar;
++ar;
--size;
}
return true;
}
实际上,我更喜欢这个版本。
答案 1 :(得分:0)
你应该保持ptr2始终是ptr + 1,所以你需要在()中将ptr2初始化为秒。 我认为只有一个循环更好。
for(; ptr2 < ptr3; ++ptr1, ++ptr2) {
if (*ptr1 > *ptr2) {
sorted = false;
}
}
return sorted;