排序帮助 - 插入排序

时间:2013-03-22 07:31:05

标签: c++ sorting

我一直关注Alex Allain的书,以便对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 Allains Book \ Chapter 1 \ main.cpp | 84 | error:ISO C ++禁止指针和整数之间的比较[-fpermissive] |

以任何方式检查并查看阵列是否已排序?请? :(

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

&#34;错误&#34;你得到的是因为你正在将值与函数指针进行比较。你没有调用这些功能。

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

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

答案 2 :(得分:0)

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

编辑:如何检查数组是否已排序? 想象一下,你面前有一排5张牌(来自正常的牌组)。你一次只能翻两张牌并进行比较并将它们面朝下放回去。你如何确定5张卡是否正常?记下你采取的步骤。一旦你弄明白了这个算法,你就可以开始思考如何用C ++代码来表达它。