簡體   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