将数组作为参数传递给函数

时间:2014-09-05 08:09:05

标签: c++ arrays parameters

所以我正在进行编程任务,而且我遇到了一个问题,每当我尝试将数组传递给头文件时,我在编译时收到错误,我不是太清楚如何做到这一点,并非常感谢通过这些数组的协助。

这是Header文件" sorting.h"

#include <iostream>
#include <cstdlib>

using namespace std;

int cost = 0;

void bubble(int Ar[],int N)
{
  cost=0;
  int swaps = 1;
  while(swaps)
  {
    swaps=0;
    for(int i = 0;i<N;i++)
    {
      if(Ar[i]>Ar[i++])
      {
        swap(Ar[i],Ar[i++]);
        swaps = 1;
        cost += 6;
      }
      cost++;
    }
  }
  for(int i=0;i<N;i++)
  {
    cout<<Ar[i]<<endl;
  }
  cout<<cost<<endl;
}

void shellSort(int Ar[], int N)
{
  cost=0;
  int swaps = 1;
  int gap = N/2;
  while(gap>0)
  {
    while(swaps)
    {
      swaps = 0;
      for(int i = 0;i<N;i++)
      {
        if(Ar[i]>Ar[i+gap])
        {
          swap(Ar[i],Ar[i+gap]);
          swaps = 1;
          cost+=6;
        }
        cost++;
      }
    }
    gap=gap/2;
  }
  for(int i = 0;i<N;i++)
  {
    cout<<Ar[i]<<endl;
  }
  cout<<cost<<endl;
}


void quickSort(int Ar[],int left, int right, int N)
{
  cost = 0;
  int i=left,j=right,tmp;
  int pivot = Ar[(left+right)/2];
  /*partition*/
  while(i<=j)
  {
    while(Ar[i]<pivot)i++;
    while(Ar[j]>pivot)j--;
    if(i<=j)
    {
      tmp=Ar[i];
      Ar[i]=Ar[j];
      Ar[j]=tmp;
      i++;
      j--;
      cost +=6;
    }
    cost+=1;
  }
  /* recursion*/
  if(left<j)quickSort(Ar,left,j,N);
  if(i<right)quickSort(Ar,i,right,N);
  for(int i=0;i<N;i++)
  {
    cout<<Ar[i]<<endl;
  }
  cout<<cost<<endl;
}

/*#if _INCLUDE_LEVEL__<1
int main()
{

}
#endif*/

这里是主文件&#34; sorting2.cpp&#34;

#include <iostream>
#include <cstdlib>
#include "sorting.h"

using namespace std;

//void bubble();
//void shellSort();
//void quickSort();

int main()
{
  int N = 20;
  int Ar[N];
  int Ar2[N];

  for(int i = 0;i<N;i++)
  {
    Ar[i] = Ar2[i] = rand()%100;
  }

  bubble(Ar[],N);

  for(int i = 0;i<N;i++)
  {
    Ar[i] = Ar2[i];
  }

  shellSort(Ar[],N);

  for(int i = 0;i<N;i++)
  {
    Ar[i] = Ar2[i];
  }

  quickSort(Ar[],0,19,N);
}

提前致谢!

1 个答案:

答案 0 :(得分:3)

更改

 bubble(Ar[],N);

 bubble(Ar, N);

(以及其他类似的地方)

您的代码中还存在其他问题:

  1. 可变长度数组不是C ++标准的一部分:

    int Ar[N];
    int Ar2[N];
    

    您应该将int N = 20;更改为const int N = 20;

  2. 此行产生未定义的行为,因为未指定运算符参数的评估顺序:

    if(Ar[i]>Ar[i++])