[英]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
。 你想要運行i
到j
,以便你永遠不會交換元素(即將條件更改為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.