2016-06-07 6 views
-2
public int[] selectionSort(int array[]) { 

    for(int i = array.length - 1; i >= 0; i--) { 
     int highestIndex = i; 

     for(int j = i; j >= 0; j--) { 
      if(array[j] > array[highestIndex]) 
       highestIndex = j; 
     } 
     int temp = array[i]; 
     array[i] = array[highestIndex]; 
     array[highestIndex] = temp; 
    } 
    return array; 
} 

선택 분류의 개념을 이해하지만 코드가 혼란 스럽습니다. 특히 누군가가 "int temp = array [i];"로 시작하는 바깥 for 루프의 마지막 세 문장에서 무슨 일이 일어나는지 설명 할 수 있습니까?코드 세그먼트 이해에 도움이 필요합니다.

+1

http://stackoverflow.com/questions/13766209/effective-swapping-of-elements-of-an-array-in-java –

+0

당신은'array [i]'와'array [highestIndex] '. 이것을하기 위해서 당신은'array [i]'의 사본을 만들어서'array [i] = array [highestIndex]; '에 의해 덮어 쓰여진 값에 접근 할 수 있습니다. – Gendarme

답변

2

이것은 유명한 스와핑 루틴입니다. 에서

int a = 2; 
int b = 6; 
int tmp = a; // now tmp has a value that is _copy_ of a i.e. 2 
a = b; // since we saved a in tmp, we can _mutate_ it, now a has b's value 
b = tmp; // swap! here, b = a won't work because a contains b's current value. 
// now a has value 6 and b has value 2, exactly what we wanted. 

: 당신이라는 두 변수의 값을 교환 할 자바 같은 언어에서 ab 말, 당신은 당신이 운송에 값을 유지하기 위해 세 번째 변수를 사용하여 이러한 루틴에 의존해야 다른 언어들도이 목적을 위해 a, b = b, a과 같은 구문을 사용할 수 있습니다. 이는 제 의견으로는 더 직관적입니다. 내부 루프가 인덱스 가장 높은 가치를 보유하고있는 요소의을 발견 한 후 선택 정렬에서

, 당신은 스왑 그것은 외부 루프 지수가 보유한 요소에 필요하고이이 점에서 달성 무엇 문맥.

+0

고마워요, 제가 찾고 있던 것이 었습니다. 두 값이 바뀌 었음을 알았지 만 나머지 코드에 어떤 영향을 미치는지 이해하지 못했습니다. –