Rahmadnet

Arrays

Jul 8th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.97 KB | None | 0 0
  1. package Arrays;
  2.  
  3. import java.util.Arrays;
  4. public class ArraySort
  5. {
  6.     public static void main(String[] args)
  7.     {
  8.         // Warm up the virtual machine
  9.         for (int i = 0; i < 10; i++)
  10.         {
  11.             int [] array = randomArray(100000, 100000);
  12.             quicksort(array);
  13.             array = randomArray(100000, 100000);
  14.             mergesort(array);
  15.         }
  16.        
  17.         // create 20 random arrays
  18.         int[][] arrays = new int [20][100000];
  19.         for (int i = 0; i < arrays.length; i++)
  20.         {
  21.             arrays[i] = randomArray(100000, 100000);
  22.         }
  23.        
  24.         long start, end;
  25.        
  26.         start = System.currentTimeMillis();
  27.         for (int i = 0; i < 10; i++)
  28.         {
  29.             quicksort(arrays[i]);
  30.         }
  31.        
  32.         end = System.currentTimeMillis();
  33.         System.out.println("quicksort: " + ((end - start)/10) + " ms");
  34.        
  35.         start = System.currentTimeMillis();
  36.         for (int i = 10; i < 20; i++)
  37.         {
  38.             mergesort (arrays[i]);
  39.         }
  40.        
  41.         end = System.currentTimeMillis();
  42.         System.out.println("mergesort: " + ((end - start)/10)+ " ms");
  43.     }
  44.    
  45.     public static int[] randomArray(int length, int range)
  46.     {
  47.         int[] result = new int[length];
  48.         for (int i = 0; i < length; i++)
  49.         {
  50.             result[i] = (int)(Math.random()*range);
  51.         }
  52.         return result;
  53.     }
  54.    
  55.     public static void quicksort(int[] array)
  56.     {
  57.         quicksort(array, 0, array.length - 1);
  58.     }
  59.    
  60.     private static void quicksort(int[] array, int left, int right)
  61.     {
  62.         if(left < right)
  63.         {
  64.             int pivot = left;
  65.             int newpivot = partition(array, pivot, left, right);
  66.             quicksort(array, left, newpivot -1);
  67.             quicksort(array, newpivot + 1, right);
  68.         }
  69.     }
  70.    
  71.     private static void swap(int[] array, int i, int j)
  72.     {
  73.         int temp = array[i];
  74.         array[i] = array[j];
  75.         array[j] = temp;
  76.     }
  77.    
  78.     private static int partition(int[] array, int pivot, int left, int right)
  79.     {
  80.         int pivotValue = array[pivot];
  81.         swap(array, pivot, right);
  82.         int storeIndex = left;
  83.        
  84.         for (int i = left; i < right; i++)
  85.         {
  86.             if (array[i] < pivotValue)
  87.             {
  88.                 swap(array, i, storeIndex);
  89.                 storeIndex++;
  90.             }
  91.         }
  92.        
  93.         swap(array, storeIndex, right);
  94.         return storeIndex;
  95.     }
  96.    
  97.     public static void mergesort(int[] array)
  98.     {
  99.         if(array.length < 2)
  100.         {
  101.             return;
  102.         }
  103.        
  104.         int[] left = Arrays.copyOfRange(array, 0, array.length/2);
  105.         int[] right = Arrays.copyOfRange(array, array.length/2, array.length);
  106.         mergesort(left);
  107.         mergesort(right);
  108.         merge(array, left, right);
  109.     }
  110.    
  111.     private static void merge(int[] array, int[] left, int[] right)
  112.     {
  113.         int leftIndex = 0;
  114.         int rightIndex = 0;
  115.         int insertIndex  = 0;
  116.         while (true)
  117.         {
  118.             if (leftIndex == left.length)
  119.             {
  120.                 while (rightIndex < right.length)
  121.                 {
  122.                     array[insertIndex++] = right[rightIndex++];
  123.                 }
  124.                 return;
  125.             } else if (rightIndex == right.length)
  126.             {
  127.                 while (leftIndex < left.length)
  128.                 {
  129.                     array[insertIndex++] = left[leftIndex++];
  130.                 }
  131.                 return;
  132.             } else if (left[leftIndex] <= right[rightIndex])
  133.             {
  134.                 array[insertIndex++] = left[leftIndex++];
  135.             } else {
  136.                 array[insertIndex++] = right[rightIndex++];
  137.             }
  138.         }
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment