Advertisement
informaticage

Multiple sorting algorithms in Java

Jan 14th, 2020
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.27 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Random;
  5.  
  6. public class Sorting {
  7.     public static void selectionSort ( int[] arr ) {
  8.         for ( int i = 0; i < arr.length; i++ ) {
  9.             int minIndex = i;
  10.             for ( int j = i + 1; j < arr.length; j++ ) {
  11.                 if ( arr[j] < arr [ minIndex ] )
  12.                     minIndex = j;
  13.             }
  14.            
  15.             System.out.println( "Minimo trovato: " + minIndex + " value: " + arr[ minIndex ] );
  16.            
  17.             int sw = arr [ i ];
  18.             arr [ i ] = arr [ minIndex ];
  19.             arr[ minIndex ] = sw;
  20.         }
  21.     }
  22.    
  23.     static void insertionSort(int arr[])  
  24.     {  
  25.         int  n = arr.length;
  26.         int i, key, j;  
  27.         for (i = 1; i < n; i++)
  28.         {  
  29.             key = arr[i];  
  30.             j = i - 1;
  31.            
  32.             while ( j >= 0 && arr[j] > key )
  33.             {  
  34.                 arr[j + 1] = arr[j];  
  35.                 j = j - 1;  
  36.             }
  37.            
  38.             arr[j + 1] = key;  
  39.         }  
  40.     }  
  41.    
  42.     static int[] mergeSort ( int arr[ ] ) {
  43.         if ( arr.length == 1 )
  44.             return arr;
  45.        
  46.         int[] firstHalf = new int[ (arr.length)/ 2 ];
  47.         int[] secondHalf = new int[ (arr.length + 1)/ 2 ];
  48.        
  49.         // (src, src-offset, dest, offset, count )
  50.         System.arraycopy( arr, 0, firstHalf, 0, firstHalf.length );
  51.         System.arraycopy( arr, (arr.length) / 2, secondHalf, 0, secondHalf.length);
  52.  
  53.        
  54.         firstHalf = mergeSort ( firstHalf );
  55.         secondHalf = mergeSort ( secondHalf );     
  56.        
  57.         int[] result = merge ( firstHalf, secondHalf );
  58.        
  59.         return result;
  60.     }
  61.    
  62.    
  63.     public static int[] merge ( int[] firstHalf, int[] secondHalf ) {
  64.         int[] merged = new int[ firstHalf.length + secondHalf.length ];
  65.        
  66.         int i = 0;
  67.         int j = 0;
  68.         int posM = 0;
  69.         while ( i < firstHalf.length && j < secondHalf.length ) {
  70.             if ( firstHalf[ i ] < secondHalf [ j ] )
  71.                 merged [ posM++ ] = firstHalf[ i ++ ];
  72.             else
  73.                 merged [ posM++ ] = secondHalf[ j ++ ];
  74.         }
  75.        
  76.         while ( i < firstHalf.length )
  77.             merged[ posM++ ] = firstHalf [ i++ ];
  78.        
  79.         while ( j < secondHalf.length )
  80.             merged[ posM++ ] = secondHalf [ j++ ];
  81.        
  82.         return merged;
  83.     }
  84.    
  85.     public static ArrayList<Integer> quickSort ( ArrayList<Integer> arr ) {
  86.         if ( arr.size() <= 1 )
  87.             return arr;
  88.        
  89.         int pivot = arr.get( new Random().nextInt( arr.size() ) ); /// arr [ random from 0 to length ]
  90.        
  91.         int pivotCounter = 0;
  92.        
  93.         ArrayList<Integer> bigger = new ArrayList<Integer>();
  94.         ArrayList<Integer> smaller = new ArrayList<Integer>();
  95.        
  96.         for ( int i = 0; i < arr.size(); i++ ) {
  97.             if ( arr.get( i ) > pivot )
  98.                 bigger.add( arr.get( i ) );
  99.            
  100.             if ( arr.get( i ) < pivot )
  101.                 smaller.add( arr.get( i ) );
  102.            
  103.             if ( arr.get( i ) == pivot )
  104.                 pivotCounter ++;
  105.         }
  106.        
  107.         bigger = quickSort ( bigger );
  108.         smaller = quickSort ( smaller );
  109.        
  110.         ArrayList<Integer> result = new ArrayList<Integer>();
  111.        
  112.         for ( int i = 0; i < smaller.size(); i++ )
  113.             result.add( smaller.get(i) );
  114.        
  115.         for ( int i = 0; i < pivotCounter; i++ )
  116.             result.add( pivot );
  117.        
  118.         for ( int i = 0; i < bigger.size(); i++ )
  119.             result.add( bigger.get(i) );
  120.        
  121.         return result;
  122.     }
  123.  
  124.     public static int[] integerSort ( int [] arr ) {
  125.         int max = arr [ 0 ];
  126.        
  127.         for ( int i = 0; i < arr.length; i++ )
  128.             if ( arr [ i ] > max )
  129.                 max = arr [ i ];
  130.        
  131.         int [ ] counter = new int [ max + 1 ];
  132.        
  133.         for ( int i = 0; i < arr.length; i++ )
  134.             counter [ arr [ i ] ] ++;
  135.        
  136.         int [] result = new int [ arr.length ];
  137.        
  138.         int resultIndex = 0;
  139.         for ( int i = 0; i < counter.length; i++ ) {
  140.             while ( counter [ i ] > 0 ) {
  141.                 result [ resultIndex ++ ] = i;
  142.                 counter [ i ] --;
  143.             }
  144.         }
  145.        
  146.         return result;
  147.     }
  148.    
  149.     public static void main( String[] args ) {
  150.         Integer[] v = { 31,41,59,26,41,68,-1 };
  151.        
  152.         int[] v1 = { 31,41,59,26,41,68,-1 };
  153.        
  154.         int[] v2 = { 31,41,59,26,41,31,10, 31,32,1, 2, 44 };
  155.        
  156.         int[] result = integerSort ( v2 );
  157.        
  158.         ArrayList<Integer> toSort = new ArrayList<Integer>(Arrays.asList(v));
  159.        
  160.         ArrayList<Integer> res = quickSort ( toSort );
  161.        
  162.         for ( int x : result )
  163.             System.out.print( x + " " );
  164.        
  165.         System.out.print ( "[ " );
  166.         for ( int x : v ) {
  167.             System.out.print ( x + ", " );
  168.         }
  169.         System.out.print ( " ]\n");
  170.        
  171.         mergeSort ( v1 );
  172.        
  173.         System.out.print ( "[ " );
  174.         for ( int x : v ) {
  175.             System.out.print ( x + ", " );
  176.         }
  177.         System.out.print ( " ]");
  178.        
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement