在C语言中反转一个数组

3

我查看了一些C语言中反转数组的视频,因此我知道我的逻辑是正确的。这是我的代码:

#include <stdio.h>
void reverse( int arr[], unsigned int len )
{
int i=0;
int n=len;
int j=len-1;
int temp;

while (i<n) 
    {
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
        i++;
        j--;
    }
}

void reverse( int arr[], unsigned int len ); 

int main( void )
{
  int a[] = {11, 19, 13};
  unsigned int len = 3;

  reverse( a, len );

  int k=0;
  for( k=0; k<len; k++ )
  {   
     printf( "%d ", a[k] );
  }
  printf( "\n" ); 

  return 0;
}

它输出相同的数组。我找不到问题出在哪里。我应该为reverse函数返回一些东西吗?

3个回答

9
你将数组反转了两次,这就是为什么你有原始数组的原因。
如何操作呢?假设有一个由10个元素组成的数组。第一步,你会交换第0个和第9个元素。最后一步,你会交换第9个和第0个元素。最终结果:没有任何变化。
你不想让i增加到n,而是要让它增加到j,这样你就不会交换元素(即将条件更改为while (i < j) { ... })。

0

你正在两次反转数组,一旦你将其反转,再次反转它,因此它变得与原始状态相同。

为了停止反转,不要运行循环直到 n,而是运行到 j


0

除此之外,为了良好的编程实践,请尽量避免手动处理参数。例如,在您的代码中,您已经使用了 len、i、j 和 n。

 #include <stdio.h>
void reverse( int arr[],int i,int j );
void reverse( int arr[], int i,int j )
{
int temp;
while (i<j) 
{
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
    i++;
    j--;
  }
}
int main() 
{ 
 int arr[] = {11, 19, 13};
 int len=sizeof(arr)/sizeof(arr[0]);
  int i=0;
  int j=len-1;
  reverse( arr,i,j);
  for (int k=0; k <len; k++)
  printf("%d ", arr[k]);
  return 0; 
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接