Advertisement
TomSkarsts

LD1 v1.0 + comments (Quicksort & Counting)

Feb 14th, 2016
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.10 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.Scanner;
  4.  
  5. public class Ld1151rdb414 {
  6.     public static void firstMethod(int[] A, int max, int min) {
  7.         /** Šķirošana ar saskaitīšanu **/
  8.        
  9.         max = A[0];
  10.         min = A[0];
  11.        
  12.         /** atrod maksimālās un minimālās vērtības **/
  13.         for (int i = 1; i < A.length; i++) {
  14.             if (A[i] > max)
  15.                 max = A[i];
  16.             if (A[i] < min)
  17.                 min = A[i];
  18.         }
  19.        
  20.         /** masīva lielums **/
  21.         int range = max - min + 1;
  22.         int[] count = new int[range];
  23.        
  24.         /** noteikts katra elementa lielums **/
  25.         for (int i = 0; i < A.length; i++) {
  26.             count[A[i] - min]++;
  27.         }
  28.        
  29.         /** tiek sakārtotas pareizās pozīcijas katram elementam **/
  30.         for (int i = 1; i < range; i++) {
  31.             count[i] += count[i - 1];
  32.         }
  33.        
  34.         /** tiek pārlabots oriģinālais/ievadītais masīvs **/
  35.         int j = 0;
  36.         for (int i = 0; i < range; i++) {
  37.             while (j < count[i]) {
  38.                 A[j++] = i + min;
  39.             }
  40.         }
  41.     }
  42.    
  43.    
  44.     public static void secondMethod(int[] A, int left, int right) {
  45.         /** QuickSort (Hoara metode) **/
  46.  
  47.         /** tiek aprēķināta mediāna - vidējais skaitlis **/
  48.         int medIndex = left + (right - left) / 2;
  49.         int medVert = A[medIndex];
  50.  
  51.         int i = left, j = right;
  52.        
  53.         /** tiek sadalīts 2 masīvos **/
  54.         while(i <= j) {
  55.             /** tiek pārbaudīts vai katrs 'i' kreisajā pusē ir mazāks par mediānu
  56.                 un vai katrs 'j' labajā pusē ir lielāks par mediānu **/
  57.             while(A[i] < medVert) {
  58.                 i++;
  59.             }
  60.  
  61.             while(A[j] > medVert) {
  62.                 j--;
  63.             }
  64.  
  65.             /** tiek mainītas vērtības starp 'i' un 'j' **/
  66.             if(i <= j) {
  67.                 int tmp = A[i];
  68.                 A[i] = A[j];
  69.                 A[j] = tmp;
  70.                 /** 'i' tiek pārvietots uz nākamo pozīciju **/
  71.                 i++;
  72.                 j--;
  73.             }
  74.             /** QuickSort metodei pielietota rekursija **/
  75.             if(left < i) {
  76.                 secondMethod(A, left, j);
  77.             }
  78.  
  79.             if(right > i) {
  80.                 secondMethod(A, i, right);
  81.             }
  82.  
  83.         }
  84.     }
  85.  
  86.     public static void main(String[] args) {
  87.         int met;
  88.         String me;
  89.         System.out.println("Toms Škarsts IRDBD02 151RDB414");
  90.        
  91.         try {
  92.             BufferedReader br = new BufferedReader(
  93.                 new InputStreamReader(System.in)
  94.             );
  95.             System.out.print("method:");
  96.             me = br.readLine();
  97.             met = Integer.parseInt(me);
  98.            
  99.         }
  100.         catch(Exception e){
  101.             System.out.println("input-output error");
  102.             return;
  103.         }
  104.         /** pārbauda, lai izvēlētas tikai metodes 1 vai 2 **/
  105.         if (met > 2 || met < 1) {
  106.             System.out.println("input-output error (only methods: 1, 2)");
  107.             return;
  108.         }
  109.        
  110.         /** jāizmanto Scanner, lai nolasītu ievadītos datus **/
  111.         Scanner input = new Scanner(System.in);
  112.        
  113.        
  114.         System.out.print("count:");    
  115.        
  116.         /** masīvs ar datiem, kura garums = 'count' ievadītais skaits **/
  117.         int count = input.nextInt();
  118.         int A[] = new int[count];
  119.        
  120.        
  121.         System.out.println("items:");      
  122.        
  123.         /** ievadīti elementi līdz sasniedz 'count' ievadīto skaitu **/
  124.         for(int i = 0; i < count; i++){
  125.             A[i] = input.nextInt();
  126.         }
  127.        
  128.         /** ievades beigas **/
  129.         input.close();
  130.        
  131.        
  132.         System.out.println("sorted:");
  133.        
  134.         /** metode 1 - Šķirošana ar saskaitīšanu **/
  135.         if (met==1) {
  136.            
  137.             /** nolasīti dati no metodes 1 un izvadīti dati pa vienam **/
  138.             firstMethod(A, 0, A.length - 1);         
  139.             for(int i = 0; i < A.length; i++) {
  140.                 System.out.print(A[i] + " ");
  141.             }
  142.         }
  143.        
  144.         /** metode 2 - QuickSort (Hoara metode) **/
  145.         if (met==2) {
  146.            
  147.             /** nolasīti dati no metodes 2 un izvadīti dati pa vienam **/
  148.             secondMethod(A, 0, A.length - 1);                
  149.             for(int i = 0; i < A.length; i++) {
  150.                 System.out.print(A[i] + " ");
  151.             }
  152.            
  153.         }
  154.        
  155.     }
  156.  
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement