정수 정렬이 필요합니다. 정렬해야합니다. 그러나 결과에는 정수 값이 포함되어서는 안되며 인덱스가 포함되어야합니다. 즉 이전 배열의 새로운 순서정수 배열 정렬 색인 가져 오기
예를 들어 [2, 1, 0]
이것을 달성하기위한 최적화 알고리즘이 무엇이며 : [10, 20, 30]
발생 하는가?
정수 정렬이 필요합니다. 정렬해야합니다. 그러나 결과에는 정수 값이 포함되어서는 안되며 인덱스가 포함되어야합니다. 즉 이전 배열의 새로운 순서정수 배열 정렬 색인 가져 오기
예를 들어 [2, 1, 0]
이것을 달성하기위한 최적화 알고리즘이 무엇이며 : [10, 20, 30]
발생 하는가?
각 요소를 (value, position)
의 튜플로 변환하고 정렬하면 모든 정렬 알고리즘으로이 작업을 수행 할 수 있습니다.
즉, [10, 20, 30]
은 [(10, 0), (20, 1), (30, 2)]
이됩니다. 그런 다음 튜플의 첫 번째 요소를 확인하는 비교자를 사용하여이 배열을 정렬하면 [(30, 2), (20, 1), (10, 0)]
을 얻을 수 있습니다. 이것으로부터 각 튜플의 두 번째 요소를 가져 와서 원하는 것을 얻을 수 있습니다 ([2, 1, 0]
). (역순 정렬을 원한다는 가정하에)
다른 정렬 알고리즘과 다르지 않습니다. 인덱스 배열을 작성하거나 가져 와서 데이터 대신 인덱스와 데이터 배열을 모두 조작하도록 수정하십시오.
정수의 원래 배열에 대한 포인터의 배열을 만들거나 병합 정렬을 수행하거나 가장 적합한 포인터 정렬 알고리즘을 수행 한 다음 포인터에서 값을 사용합니다. 단지 포인터를 원래의 정수 배열을 포함하는 할당 된 블록의 시작 부분에 대한 각 포인터 상대 주소를 기반으로 계산하는 목록을 실행하십시오.
이것은 정렬 알고리즘의 대부분 구현이 수행하는 것입니다. 너 시도해 봤니? –