gpt4 book ai didi

c++ - 检查数组是否排序的函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:34 24 4
gpt4 key购买 nike

所以当谈到 C++ 时,我只是一个初级程序员,我必须编写一个函数来检查 int 数组是否使用指针排序(不允许使用索引符号),这是我目前所拥有的:

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。感谢任何帮助,谢谢。

最佳答案

"The more you overthink the plumbing, the easier it is to stop up the drain" -- 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;
}

其实我更喜欢这个版本。

关于c++ - 检查数组是否排序的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com