반응형

버블 정렬( Bubble Sort )를 이용한 데이터 정렬하기

 

프로젝트를 하다가 Collections.sort()함수를 사용한 적이 있습니다.
갑자가 대학교 때 배웠던 버블 소트가 생각나서 작성해 보았습니다.

■ SOURCE

    public static void main(String[] args) {
        
        ArrayList<String> arrData = getData();
        
        System.out.println( "전 : " + arrData );
        
        for( int i = 0; i < arrData.size(); i ++ ) {
            
            for( int k = 0; k < arrData.size() - 1; k ++ ) {
                
                // 앞글자가 더 크면
                if( arrData.get( k ).charAt( 0 ) >  arrData.get( k + 1 ).charAt( 0 ) ) {
                    
                    String strTmp = arrData.get( k );
                    arrData.set( k, arrData.get( k + 1 ) );
                    arrData.set( k + 1, strTmp );
                }
            }
        }
        
        System.out.println( "후 : " + arrData );
    }
    
    
    // Sample-Data
    private static ArrayList<String> getData() {
        
        ArrayList<String> arrData = new ArrayList<String>();
        
        arrData.add( "C" ); arrData.add( "J" ); arrData.add( "Z" ); arrData.add( "S" ); arrData.add( "B" );
        arrData.add( "A" ); arrData.add( "F" ); arrData.add( "C" ); arrData.add( "H" ); arrData.add( "M" );
        
        return arrData;
    }

 

버블 소트의 핵심(?) 로직은 딱 4줄인것 같습니다.

    if( arrData.get( k ).charAt( 0 ) >  arrData.get( k + 1 ).charAt( 0 ) ) {
        
        String strTmp = arrData.get( k );
        arrData.set( k, arrData.get( k + 1 ) );
        arrData.set( k + 1, strTmp );
    }

현재의 값과 다음 값을 비교하여, 현재값이 더 크면, 순서를 바꾸는 로직입니다.

   ① 현재값을 strTmp에 저장하고,

   ② 다음값을 현재 자리로 세팅하고,

   ③ strTmp에 저장한 현재값을 다음값의 자리에 세팅하면 됩니다.

참 쉽~죵?ㅋ

 

■ RESULT

전 : [C, J, Z, S, B, A, F, C, H, M]
후 : [A, B, C, C, F, H, J, M, S, Z]

 

※ 참고
   - 링크 ☞ Collections.sort()를 이용하여 데이터(배열) 정렬하기

 

끝.

반응형