2016-10-18 1 views
0

그래서,이 내 코드입니다 : 알파벳 순으로 정렬 내 자신의 머지 소트 방법을 사용하여이 코드는 거대한 ActorsArrayList와 함께 사용하기위한 것입니다왜 내 정렬 방법으로 일부 charachter를 정렬하지 못합니까?

public ArrayList<Actor> SortArray(ArrayList<Actor> actorsArrayList){ 
    if (actorsArrayList.size()==2){ 
     if (actorsArrayList.get(0).getName().compareTo(actorsArrayList.get(1).getName())>0){ 
      Actor tmpActor = actorsArrayList.get(0); 
      actorsArrayList.set(0, actorsArrayList.get(1)); 
      actorsArrayList.set(1, tmpActor); 
     } 
    }if (actorsArrayList.size()>2){ 
     ArrayList<Actor> part1 = new ArrayList<Actor> (actorsArrayList.subList(0, actorsArrayList.size()/2)); 
     ArrayList<Actor> part2 = new ArrayList<Actor> (actorsArrayList.subList(actorsArrayList.size()/2, actorsArrayList.size())); 
     SortArray(part1); 
     SortArray(part2); 
     actorsArrayList = MergeArrays(part1,part2); 
    } 
    return actorsArrayList; 
} 

public ArrayList<Actor> MergeArrays(ArrayList<Actor> part1, ArrayList<Actor> part2){ 
    ArrayList<Actor> mergedArray = new ArrayList<Actor>(); 
    int i = 0; 
    int j = 0; 
    while (i<part1.size() && j<part2.size()){ 
     if (part1.get(i).getName().compareTo(part2.get(j).getName())<0){ 
      mergedArray.add(part1.get(i)); 
      i=i+1; 
     }else if (part1.get(i).getName().compareTo(part2.get(j).getName())>0){ 
      mergedArray.add(part2.get(j)); 
      j=j+1; 
     } 
    } 

    while (i<part1.size()){ 
     mergedArray.add(part1.get(i)); 
     i=i+1; 
    } 
    while (j<part2.size()){ 
     mergedArray.add(part2.get(j)); 
     j=j+1; 
    } 
    return mergedArray; 
} 

(Actor 클래스는 문자열이 매개 변수의 이름을 포함 나는 배열을 정렬하는 데 사용). 나는 현재이 메소드가 [d, a, b, l, z, x, y, c, w]를 포함하는 아주 간단한 배열로 동작하도록 만들고있다. 그것은 능숙하게 작동하지만 "l"은 시작 순서가 무엇이든 관계없이 항상 끝납니다. 실제 액터 arrayList (실제 이름 포함)로 시도해 본다면 실제로 정렬되지 않습니다.

도움을 많이 주셔서 감사합니다. :)

편집 1 : 명확한 코드. 내가 정렬하고자하는 배열의 크기가 0 인 경우를 필요로하지 않는다.

편집 2 : 내 프로그램의 이전 단계에서 병합되었으므로 동일한 이름을 가진 배우가 2 명까지 존재하지 않습니다.

+1

낙타 케이스에 변수 이름을 지정하는 것이 좋습니다. 대문자를 모두 사용하면 코드를 읽기가 어려워집니다. – Brunaldo

+1

tldr; 디버거에서 단계적으로 실행하십시오. 그리고 코드를 게시 할 때 Java 명명 규칙을 따르십시오. 그것은 정말로 눈의 고통입니다. – Fildor

+1

적어도 compareTo == 0 인 경우 누락되었습니다. –

답변

0

actorsArrayList.size()>2의 경우는 SortArray()입니다. 각 부분을 새 ArrayList으로 정렬하고 있지만 MergeArrays()에 전화하면 정렬 된 목록을 사용하는 것을 잊어 버렸습니다. 다음과 같이 수정하십시오.

 part1 = SortArray(part1); 
     part2 = SortArray(part2); 
관련 문제