소소한팁 - 원하는 개수 만큼만 정렬하기 5 (+ ID 조건)
25 Feb 2020 | 알고리즘 소소한팁최종 결과로 배열을 정렬할 때 조건이 두 가지 이상 붙을 때가 있습니다. 예를 들어서 값이 가장 큰 것부터 n개를 정렬하고 만약 값이 같으면 ID가 작은 것부터 정렬해야 할 때입니다.
보통 정렬 알고리즘에 사용될 compare 함수를 구현하고 정렬할 때 사용하는데요, 간단하게 할 수 있는 방법이 있어서 공유드립니다. 이 방법을 사용하기 위해서는 값의 ID가 값을 저장하고 있는 배열의 index와 같아야 합니다.
값이 큰 것부터 정렬하고 같은 경우 ID가 작은 것부터 정렬
#include <iostream>
int sample_arr[10] = { 5,1,5,1,8,8,0,6,0,1 };
int main() {
int total_num = 10;
int sort_num = 5;
int result[5];
for (int i = 0; i < sort_num; i++) {
int max = -1;
int max_idx = -1;
// 제일 큰 값을 검색
// 앞에서부터 순회하기 때문에 값이 같으면 id는 작은 순으로 정렬
for (int j = 0; j < total_num; j++) {
if (sample_arr[j] > max) {
max = sample_arr[j];
max_idx = j;
}
}
// 다음에 다시 찾는것을 방지하기 위해서 제거
sample_arr[max_idx] = -1;
result[i] = max_idx;
}
for (int i = 0; i < sort_num; i++) {
printf("%d ", result[i]);
}
}
출력
4 5 7 0 2
Comments