2009-11-08 5 views
0

새 배열을 만들지 않고 배열을 제 자리에서 되돌릴 수있는 방법은 무엇입니까?새 배열을 만들지 않고 문자 배열을 뒤집을 때

+0

? 또한 참조 http://stackoverflow.com/questions/1469311/reverse-array-in-place http://stackoverflow.com/questions/585257/is-there-a-better-way-to-reverse-an -by-bytes-in-memory + 많은 다른 것들. – Dipstick

답변

1

단일 변수를 임시 버퍼로 사용하여 끊임없이 끝을 교체하십시오. 의사 코드 :

temp = a[0] 
a[0] = a[size - 1] 
a[size - 1] = temp 

등등.

+0

'size - 2'가 아니라'size - 1'이어야한다고 생각하십시오. – Thomas

+0

지난 수십 년 동안 작성된 컴파일러를 사용하는 경우 XOR이거나 XOR 일 수도 있고 임시로 등록 할 수도 있습니다. –

+0

xor 스왑 메소드를 사용하면 일시적인. 의사 코드에서, A는 [CURR]이 [CURR] XOR을 = - - A [CURR] = A [CURR]이 [CURR 크기]에 xor 는 A [CURR] = A [CURR]이 [CURR 크기]에 xor [크기 - curr] ++ curr –

0

메모리의 배열을 뒤집어 쓰지 마십시오. 역순으로 반복하십시오!

+0

전달을 반복하지만 역순으로해야하는 라이브러리 함수에 배열을 전달하는 경우 그렇게하려면 메모리에서 배열을 반대로해야합니다. 그러나 경우에 따라 정확합니다. – alternative

5

숙제는 당신이

를 켭니다 :-) 어쨌든 원하는 언어를 지정하지 않음으로써 상대적으로 쉽게 만들었다 나만의 의사 코드를 의미이 선택의 여지가 귀하의 언어로 :

Set i1 to index of first element in array 
Set i2 to index of last element in array 
while i1 < i2: 
    Set temporary variable to element number i1 
    Set element number i1 to element number i2 
    Set element number i2 to temporary value 
    Add 1 to i1 
    Subtract 1 from i2 

이상적인 방법은 변수를 추적하기 위해 종이를 사용하여 실제로 알고리즘을 실행하는 것입니다.

  • 배열의 각 요소.
  • i1i2.
  • temporary variable.

더 간단한 알고리즘을 사용하는 경향이 있습니다. 더 어려운 것들은 컴퓨터가 나를 위해 그 일을 할 수 있도록 디버그 문을 삽입합니다. 따라서 종이로 시작하십시오 :

i1 | i2 | tempvar | el[0] | el[1] | el[2] | el[3] | el[4] | el[5] 
---+----+---------+-------+-------+-------+-------+-------+------ 
         H  e  l  l  o  ! 

그리고 단계별로 하나씩 단계별로 실행하고 각 열을 확인하거나 변경하십시오. 그러면 코드가 주어진 것보다 훨씬 효과가 있다는 것을 이해하게 될 것입니다.

9
public static int[] reverseArrayWithoutTempArray(int[] array) { 
    int i = 0, j = array.length - 1; 
    for (i = 0; i < array.length/2; i++, j--) { 
     int temp = array[i]; 
     array[i] = array[j]; 
     array[j] = temp; 
    } 
    return array; 
} 
+0

100 % 정확함 (널 배열의 장소 확인) – Jone

1
public static void main(String args[]){ 
      int j=arr.length;  
for(int i=0;i<arr.length/2;i++){ 
      int temp=arr[i]; 
      arr[i]=arr[j-1-i]; 
      arr[j-1-i]=temp;} 
     for(int i=0;i<arr.length;i++){ 
      System.out.println(arr[i]); 
     } 
    } 
어떤 언어
관련 문제