簡體   English   中英

將數組作為參數傳遞給函數

[英]Passing an array as a parameter to a function

因此,我正在進行編程任務,但遇到一個問題,當我每次嘗試將數組傳遞到頭文件時,在編譯時都會收到錯誤消息,我不太清楚如何執行此操作,並且會非常感謝您在傳遞這些數組方面的幫助。

這是頭文件“ 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*/

這是主文件“ sorting2.cpp”

#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);
}

提前致謝!

更改

 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++]) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM