2012-02-02 3 views
1

정수 정렬이 필요합니다. 정렬해야합니다. 그러나 결과에는 정수 값이 포함되어서는 안되며 인덱스가 포함되어야합니다. 즉 이전 배열의 새로운 순서정수 배열 정렬 색인 가져 오기

예를 들어 [2, 1, 0]

이것을 달성하기위한 최적화 알고리즘이 무엇이며 : [10, 20, 30]

발생 하는가?

+0

이것은 정렬 알고리즘의 대부분 구현이 수행하는 것입니다. 너 시도해 봤니? –

답변

2

각 요소를 (value, position)의 튜플로 변환하고 정렬하면 모든 정렬 알고리즘으로이 작업을 수행 할 수 있습니다.

즉, [10, 20, 30][(10, 0), (20, 1), (30, 2)]이됩니다. 그런 다음 튜플의 첫 번째 요소를 확인하는 비교자를 사용하여이 배열을 정렬하면 [(30, 2), (20, 1), (10, 0)]을 얻을 수 있습니다. 이것으로부터 각 튜플의 두 번째 요소를 가져 와서 원하는 것을 얻을 수 있습니다 ([2, 1, 0]). (역순 정렬을 원한다는 가정하에)

0

다른 정렬 알고리즘과 다르지 않습니다. 인덱스 배열을 작성하거나 가져 와서 데이터 대신 인덱스와 데이터 배열을 모두 조작하도록 수정하십시오.

0

정수의 원래 배열에 대한 포인터의 배열을 만들거나 병합 정렬을 수행하거나 가장 적합한 포인터 정렬 알고리즘을 수행 한 다음 포인터에서 값을 사용합니다. 단지 포인터를 원래의 정수 배열을 포함하는 할당 된 블록의 시작 부분에 대한 각 포인터 상대 주소를 기반으로 계산하는 목록을 실행하십시오.