Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.21 KB | None | 0 0
  1. package Core;
  2.  
  3. public class PP4Partition
  4. {
  5.     public static void main (String args[])
  6.     {
  7.         Integer[] data1 = {5,4,7,8,3};
  8.         Integer[] data2 = {7,4,1,1,5,6};
  9.        
  10.         quickSort(data1);
  11.         quickSort(data2);
  12.         for(int i = 0; i < data1.length; i++)
  13.         {
  14.             System.out.print(data1[i]);
  15.         }
  16.         System.out.println("");
  17.         for(int i = 0; i < data2.length; i++)
  18.         {
  19.             System.out.print(data2[i]);
  20.         }
  21.     }
  22.    
  23.     public static <T extends Comparable<T>> void quickSort(T[] data)
  24.     {
  25.         quickSort(data, 0, data.length - 1);
  26.     }
  27.    
  28.     private static <T extends Comparable<T>> void quickSort (T[] data, int min, int max)
  29.     {
  30.         if(min < max)
  31.         {
  32.             int indexofpartition = partition(data, min, max);
  33.             quickSort(data, min, indexofpartition - 1);
  34.             quickSort(data, indexofpartition + 1, max);
  35.         }
  36.     }
  37.    
  38.     private static <T extends Comparable<T>> int partition(T[] data, int min, int max)
  39.     {
  40.         T partitionelement;
  41.         int partitionindex;
  42.         int left, right;
  43.         int middle = (min + max)/2;
  44.         left = min;
  45.         right = max;
  46.        
  47.         if(left >= right && left <= middle || left <= right && left >= middle)
  48.         {
  49.             partitionindex = left;
  50.         }
  51.         else if (right >= left && right <= middle || right <= left && right >= middle)
  52.         {
  53.             partitionindex = right;
  54.         }
  55.         else //if (middle >= left && middle <= right || middle <= left && middle >= right)
  56.         {
  57.             partitionindex = middle;
  58.         }
  59.        
  60.         partitionelement = data[partitionindex];
  61.         swap(data, partitionindex, min);
  62.        
  63.         while(left < right)
  64.         {
  65.             while(left < right && data[left].compareTo(partitionelement) <= 0)
  66.             {
  67.                 left++;
  68.             }
  69.            
  70.             while(data[right].compareTo(partitionelement) > 0)
  71.             {
  72.                 right--;
  73.             }
  74.            
  75.             if(left < right)
  76.             {
  77.                 swap(data, left, right);
  78.             }
  79.         }
  80.        
  81.         swap(data, min, right);
  82.         return right;
  83.     }
  84.    
  85.     /**
  86.      * Swaps to elements in an array. Used by various sorting algorithms.
  87.      *
  88.      * @param data   the array in which the elements are swapped
  89.      * @param index1 the index of the first element to be swapped
  90.      * @param index2 the index of the second element to be swapped
  91.      */
  92.     private static <T extends Comparable<T>> void swap(T[] data, int index1, int index2)
  93.     {
  94.         T temp = data[index1];
  95.         data[index1] = data[index2];
  96.         data[index2] = temp;
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement