1

我一直在关注 Alex Alllain 的书,以便对 C++ 有一个很好的理解。我已经了解了一些基础知识,但是我像往常一样在数组和排序算法上遇到了困难。无论如何,他提出的问题之一是检查数组是否已排序。如果不是,请对其进行排序...这是代码:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void swap(int array[], int firstindex, int secondindex);
int findsmallel(int array[], int size, int index)
{
    int indexofsmall=index;
    for(int i=index+1; i<size; i++)
    {
        if(array[i]<array[indexofsmall])
            {
                indexofsmall=i;
            }
    }
    return indexofsmall;
}
int findhigh(int array[], int size, int index)
{
    int indexofhigh=index;
    for(int i=index+1; i<size; i++)
    {
        if(array[i]>array[indexofhigh])
            {
                indexofhigh=i;
            }
    }
    return indexofhigh;
}
void sortlow(int array[], int size)
{
    for (int i=0; i<size; i++)
    {
        int index=findsmallel(array, size, i);
        swap(array, index, i);
    }
}
void sorthigh(int array[], int size)
{
    for (int i=0; i<size; i++)
    {
        int index=findhigh(array, size, i);
        swap(array, index, i);
    }
}
void swap(int array[], int firstindex, int secondindex)
{
    int temp=array[firstindex];
    array[firstindex]=array[secondindex];
    array[secondindex]=temp;
}
void displayarray(int array[], int size)
{
    cout<<"{ ";
    for(int i=0; i<size;i++)
    {
        if(i!=0)
        {
        cout<<", ";
        }
    cout<<array[i];
    }
    cout<<" }";
}
int main()
{
    int inputedarray[5];
    cin>>inputedarray[];
    if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)
    {
        sortlow(inputedarray, 5);
        displayarray(inputedarray, 5);
    }
    else
        cout<<"Array is already sorted."<<endl;
    return 0;
}

检查条件时出现两个关于指针和整数比较的错误。任何帮助将不胜感激!编辑:我得到的错误是: C:\Code Block Projects\Alex Alllains Book\Chapter 1\main.cpp|84|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|

有什么方法可以检查数组是否已排序?请?:(

4

3 回答 3

3

我认为它的第三行main是在做一个比较:检查数组的最后一个元素是否是最小/最大的,以确定数组是否已排序。虽然这不是正确的方法,但让我们假设它正在这样做。更改您的代码

 if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)

 if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
        inputedarray[4] != findhigh(inputedarray,5,0))

然后你应该能够编译你的代码。

让您的代码正常工作。修改 main 如下:

int main()
{
    int inputedarray[5];
    for( int i=0; i<5; i++)
    {
        cin>>inputedarray[i];
    }

    if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
       inputedarray[4] != findhigh(inputedarray,5,0))
    {
        sortlow(inputedarray, 5);
        displayarray(inputedarray, 5);
    }
    else
        cout<<"Array is already sorted."<<endl;
    return 0;
}

然后你应该像这样输入你的整数

2 3 5 1 4

除非您将最大/最小整数作为最后一个输入数字,否则它应该可以正常工作。

于 2013-03-22T07:54:03.433 回答
1

您得到的“错误”是因为您正在将值与函数指针进行比较。您不调用这些函数。

正如 kma 所指出的,您不能在表达式中使用这些函数调用,因为它们 return void,即根本不返回值。

即使确实返回了某些内容,第一次调用也可以重新排列数组,因此在下一次比较中,数组索引 4 处的先前内容将不同。

于 2013-03-22T07:38:26.127 回答
0

主程序中的 sortlow 和 sorthigh 不是声明的 int 变量,而是函数名。C++ 将此作为函数的指针(地址)。但是您将它们与数组中的整数进行比较。

编辑:如何检查数组是否已排序?想象一下,您面前有一组 5 张卡片(来自普通的一副卡片),正面朝下。你一次只能翻两张牌,比较它们,然后把它们面朝下放回去。你如何确定这5张牌是否有序?写下你采取的步骤。一旦你弄清楚了那个算法,你就可以开始考虑如何用 C++ 代码来表达它。

于 2013-03-22T07:36:25.043 回答