2017-01-12 3 views
-2

다음 작업이 있는데 불행히도이를 해결하는 방법을 모릅니다.특정 함수를 사용하여 배열 정렬

다음과 같은 기능을 이미 구현 한 :

function array_swap(&$ar,$j) { ... } // changes element at position $j with element at position 0 
/* 
* Example: 
* $ar=array(3,1,5); 
* array_swap($ar, 2); // change element at position 2 with element at position 0 
* result is array(5,1,3); 
*/ 

(1) 당신은 당신이 (배열

3 당신은 어떤 루프를 사용할 수의 요소를 비교할 수있는 기능

2 array_swap 사용해야합니다, foreach, while, 등)

4 작업을 배열 오름차순으로 정렬하는 것입니다.

누군가가 나에게 도움을 줄 수있는 아이디어를 구현하는 방법? 어쩌면 충분한 알고리즘 일 수도 있으므로 코드를 작성할 수 있기를 바랍니다. :) 이것은 알고리즘 질문이며 이전에 기존 알고리즘을 확인했지만 비슷한 것은 발견되지 않았습니다.

+1

.. 설명 할 수 있습니다 : "..이 작업은 배열을 오름차순으로 정렬하는 것입니다 ..."? 두 개의 요소 pos를 바꾼다면. pos와 함께 4 예를 들어 0을 입력 한 다음 배열을 정렬하면 결과는 항상 동일합니다 – Milan

+1

[PHP에서 배열 및 데이터를 정렬하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/17364127/how-cani-i- sort-arrays-and-data-in-php) – Icarus

+2

@Milan 아마도 배열을 정렬하는 방법을 찾기 위해 주어진 함수를 사용해야하는 알고리즘 질문 ​​일 겁니다. OP에게 실제로 시도해 본 것은 무엇입니까? – georaldc

답변

0

해결 방법 중 하나는 array_swap 함수를 두 번 사용하는 것입니다. 첫째, 지금까지 발견 된 가장 높은 값을 첫 번째 인덱스에 배치 한 다음 배열의 끝으로 이동하는 것입니다. 올바른 위치에서 가장 높은 가치를 얻었으므로 이제 1 개의 인덱스로 이동할 수 있습니다. 이전 최고 값 아래에서 다음으로 높은 값을 찾아 이중 스왑을 다시 수행하면됩니다. 어레이의 시작 부분에 도달 할 때까지 반복하십시오.

위의 코드는 O (n^2) 솔루션이므로, 더 효과적인 해결책이있을 수 있습니다.

+0

대단히 감사합니다! 이것은 해결책을 생산하는 코드를 작성하는 데 도움을주었습니다. 내가 작성한 코드는 다음과 같습니다. https://codeshare.io/GbvnnO –

+0

그럴 것 같지만 두 번째 배열을 사용하지 않고 array_search 함수를 사용하지 않고 도망 갈 수 있습니다. 현재 가장 높은 값과 다음에 삽입해야하는 인덱스를 추적하면됩니다. – georaldc

+0

추가 스토리지를 사용하지 않고 오버 헤드를 추가하는 내장 함수를 사용하지 않고 배열을 정렬하는 알고리즘은 다음과 같습니다. 자바 스크립트이지만 PHP로 번역하기가 쉽습니다. 일부 줄을 설명하기 위해 몇 가지 설명을 추가했습니다. https://jsfiddle.net/georaldc/nmd8h2f8/ – georaldc

관련 문제