스와핑하는 대신 선택 정렬을 안정적인 정렬로 변경하기 위해 삽입 할 수 있음을 읽었습니다. 나는 같은 온라인을 다음과 같이 구현했다. ( (1,0), (2,0), (5,0), (4,0), 5,1를 :선택 정렬 - 안정
void selection (int a[], int n)
{
while (--n > 0) {
int i, max = n;
for (i = 0; i < n; i++) {
if (a[i] >= a[max])
max = i;
}
if (max != n) {
int save = a[max];
for (i = max; i < n; i++)
a[i] = a[i + 1];
a[n] = save;
}
}
}
나는이 다음에 대한 안정적인 정렬 될 것입니다 방법을 이해 해달라고
)
나는 위에서 언급 한 구현은 내가 볼 해달라고 (,) 5,0)을 (1,0), (2,0), (4,0), (5,1을 줄 것이라고 생각 이것은 안정적인 행동으로 이해합니다. 나 맞아. 그렇다면 안정적인 선택 정렬을 어떻게 구현할 수 있습니까?
다음 코드를 변경하면 안정적인 선택 정렬이 가능합니다. 내가 틀렸다면 나를 바로 잡아라. 이 경우, 우리에게 내가 생각 원하는 결과를주지 않을 줄
for (i = 0; i < n; i++) {
if (a[i] >= a[max])
max = i;
}
, 그것은 늘 내가 정렬 준 데이터에 대한 안정적인 결과를 제공합니다. 나는 다음 코드가 잘 될 것이라고 생각한다.
for (i = 0; i <= n; i++) {
if (a[i] >= a[max])
max = i;
}
내가 잘못하면 나를 교정 해 주시겠습니까?
감사
응답 해 주셔서 감사합니다. (a [i]> = a [max]) max = i; } 그 행은 우리에게 내가 생각하는 원하는 결과를주지 않을 것입니다.이 경우에는 정렬을 위해 제공 한 데이터에 대해 안정적인 결과를 얻지 못할 것입니다. 나는 다음 코드가 잘 될 것이라고 생각한다. for (a [i]> = a [max]) max = i; (i = 0; } 내가 틀렸다고 정정 해 주시겠습니까? 감사합니다. – trialyogi
@trialyogi : 네, 맞습니다. 그것은 for (i = 0; i <= n; i ++)이어야합니다. 그러면 모든 요소를 살펴보고 정렬이 안정됩니다. – interjay