2013-08-30 2 views
2

배열이 있고 i 번째 요소와 i + 1 번째 요소 만 교환 할 수 있습니다. 이 배열을 최소 수의 교환 작업을 사용하여 순환 배열로 정렬하려면 어떻게해야합니까?배열을 원형 배열로 정렬

예를 들어 내 배열은 다음과 같습니다 -

3 5 4 2 1 

그리고 교환 2 층과 3 나는 내가 어떤

3 4 5 1 2 

를 얻을 수 4, 5를 교환 한 후

3 4 5 2 1 

과를 얻을 수 2 개의 교환기에서 필요한 정렬 된 원형 배열.

또 다른 예

4 3 5 1 2 
다음

1, 2의 한 교환 내가 이것을 달성하기 위해 사용한다 3 4 5 1 2

어떤 알고리즘을 나에게 준다?

+0

어떤 방법을 시도해 보셨습니까? 최소한 무차별 대입 (brute force) 알고리즘을 가지고 있습니까? –

+1

또한 첫 번째 요소와 마지막 요소를 교환 할 수 있습니까 (= 그 규칙도 원형입니까?)? –

+0

nope ... 오직 i 번째 nd i + 1 번째 exchnge 만 허용됩니다 ... 요소의 위치에 대한 해시를 만들려고했는데 오른쪽 또는 왼쪽으로 이동해야하는지 여부를 확인했습니다. –

답변

1

임시 변수와 함께 for 루프를 사용하면 모든 배열 요소를 정렬 할 수 있지만 for 루프는 2 씩 증가해야합니다.

len=array[(array.length)]; 
for (i=1 ; i<len - 1 ; i=i+2){ 
    temp=array[i]; 
    array[i]=array[i+1]; 
    array[i+1]=temp;  
} 
temp=array[0]; 
array[o]=array[len]; 
array[len]=temp; 

이 간단한 알고리즘은 필요에 따라 완벽하게 자바 및 정렬 배열에서 작동합니다.

+0

이 기술은 최소 스왑 수를 어떻게 보장합니까? 여기에 필요한 스왑의 수는 항상 n/2 atleast입니다 –