get indexes of n smallest elements in an array

前端 未结 6 1613
醉酒成梦
醉酒成梦 2020-12-17 08:15

I have an int array int[] myArray = new int[100]; and want to get indexes of smallest 10 (any n) elements. How can I do this?

6条回答
  •  醉话见心
    2020-12-17 09:00

    Sort them by index and return the first 10

    First create the structure to hold both, index and value:

    class IndexValue {
       final int i;
       final int v;
    }
    

    Then create an array with this new structure:

    IndexValue[] array = new IndexValue[myArray.length];
    for( int i = 0 ; i < array.length ; i++ ) {
        array[i] = new IndexValue( i, myArray[i] );
    }
    

    Finally sort it and take the first N elements

    Arrays.sort( array ); // you'll need to implement Comparator though 
    
    for( int i = 0 ; i< 10 ;i++ ) {
        System.out.print( array[i] );
    }
    

    Here's the full working code:

    import java.util.Arrays;
    import java.util.Random;
    import java.util.Comparator;
    import static java.lang.System.out;
    
    class IndexValue {
       final int i,v;
    
       public IndexValue( int i, int v ) {
           this.i = i;
           this.v = v;
       }
    }
    public class SortByIndex {
        public static void main( String [] args ) {
    
            Random random = new Random();
    
            int [] myArray = new int[100];
            IndexValue[] array = new IndexValue[myArray.length];
    
            // Fill the array 
            for( int i = 0 ; i < 100; i++ ) {
                myArray[i] = random.nextInt();
                array[i] = new IndexValue( i, myArray[i] );
            }
    
            // Sort it 
            Arrays.sort( array, new Comparator(){
                public int compare( IndexValue a, IndexValue b ){
                    return a.v - b.v;
                }
            });
    
            // Print it
            out.println("Top:");
            for( int i = 0 ; i < 10 ; i++ ) {
                out.println( String.format("array[%d]=%d",  array[i].i, array[i].v ));
            }
    
        }
    }
    

提交回复
热议问题