繁体   English   中英

在c中反转一个数组

[英]Reverse an array in c

我检查了一些在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功能返回一些东西吗?

你正在反转阵列两次; 这就是你拥有原始阵列的原因。

怎么样? 举一个10元素数组的例子。 作为您的第一步,您将交换第0和第9个元素。 作为你的最后一步,你将交换第9和第0个元素。 最终结果:没有变化。

你不想让i跑到n 你想要运行ij ,以便你永远不会交换元素(即将条件更改为while (i < j) { ... }

你正在颠倒你的阵列两次,所以一旦你扭转了它,你再扭转它,使它变成与原始相同。

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

除此之外,为了一个好的编程实践,试着手动避免参数。例如。 在您的代码中,您使用了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; 
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM