Stable sort와 unstable sort의 차이입니다. 가중치가 같은 여러 원소들끼리의 상대적 순서가 정렬후에도 보존되는것을 stable하다고 하는데, 버블소트는 stable하지만 std::sort는 stable하다고 보장되지 않으며(보통의 구현체에서는 unstable합니다), 그래서 std::sort에서 stable한 정렬을 원한다면 원래의 인덱스 또한 비교의 가중치로 주어야 합니다. 혹은 std::stable_sort라는 선택지도 있습니다.
maosadao 4년 전
정렬하기 전과 후의 인덱스를 비교하여 그 차이의 최댓값에 +1을 하는 방식으로 풀었습니다. 그런데 아래소스코드 그대로 제출했을 때는 ac를 받지 못했는데compare() 부분을
bool compare(A x, A y)
{
if(x.size!=y.size) return x.size < y.size;
return x.num < y.num;
}
이렇게 수정했더니 ac가 뜨더군요. 혹시 값(size)이 같을때 인덱스(num)의 비교가 왜 필요한지 그 예시랑 같이 알려 주실수 있나요? 저는 size가 같으면 정렬전, 중, 후에도 num은 배열 상에서 뒤에 있는게 앞에있는거 보다 당연히 크다고 생각해서 잘 모르겠네요ㅠㅠ