2017-11-17 2 views
-2

SongLine 객체의 배열을 lineNumber (배열의 각 요소는 자체 lineNumber 필드가있는 SongLine 객체)로 정렬해야합니다 (오름차순).정수 필드로 객체 배열 정렬

public static void sortByLineNumber(SongLine[] songs) { 
    for(int i = 0; i < songs.length - 1; i++) { 
     if((songs[i].getLineNumber()) > (songs[i+1].getLineNumber())) { 
      SongLine[] temp = new SongLine[1]; 
      temp[0] = songs[i]; 
      songs[i] = songs[i + 1]; 
      songs[i + 1] = temp[0]; 
     } 
    } 
} 

SongLine 클래스에는 lineNumber를 개별적으로 가져 와서 설정할 수있는 메서드가 있습니다. 제 질문은이 메서드를 호출 할 때 배열의 요소를 정렬하지 않는 이유는 무엇입니까?

+1

Java에 정렬 방법이 내장되어있는 이유는 무엇입니까? 과제의 일부로 작성해야한다고 가정하면 정렬 알고리즘을 연구 했습니까? 수업에서 정렬 알고리즘을 다뤘나요? 당신이 코딩 한 것이 실제 정렬 알고리즘인지 확실합니까? –

+0

사용자 지정 비교기 –

답변

0

요소를 전환 한 후에 요소를 한 번만 전환하고 목록을 반복해서 표시하지 않으므로 if의 값을 i로 설정하여 스왑이 수행 될 때마다 알고리즘이 처음부터 목록을 검색하도록합니다 , 이것은 강렬한 힘으로 SongLine 객체 목록을 정렬합니다.

사이드 노트 : 요소를 바꾸려면 SongLine obj를 사용하고, 배열 내에서 단일 개체를 스와핑 할 때는 SongLine 배열을 만드는 것이 의미가 없습니다.

public static void sortByLineNumber(SongLine[] songs) { 
    for(int i = 0; i < songs.length - 1; i++) 
    { 
     if(songs[i].getLineNumber() > songs[i+1].getLineNumber()) 
     { 
      SongLine temp = songs[i]; 
      songs[i] = songs[i + 1]; 
      songs[i + 1] = temp; 
      i = 0; //force it to start from the beginning 
     } 
    } 
} 

또 다른 방법은 노랫 길 비교기 클래스를 만드는이되어야 할 것이다 다음은 무력 정렬보다 빠른 것 노랫 길 개체의 컬렉션에은, Collections.sort() 메서드를 호출 할 수있다. 비교기의 비교 방법에 대한 논리로 현재 if 논리를 사용하면됩니다.

Check out this example

+0

0보다 먼저 1을 주문한 다음 모든 lineNumber> 2에 대해 올바르게 정렬하는 것을 제외하고는 거의 작동합니다. –

+0

어떤 경우가 0보다 먼저 주문할 수 있는지 확실하지 않습니다 ... –