Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.54 KB | None | 0 0
  1. import java.util.*;
  2. public class Algoritmi{
  3.     public static void main(String[] args){
  4.         Scanner tastiera=new Scanner(System.in);
  5.        
  6.         System.out.println("inserisci la lunghezza del vettore di interi");
  7.         int lunghezza=tastiera.nextInt();
  8.        
  9.         int i=0;
  10.         int j=lunghezza-1;
  11.        
  12.         int[] v=new int[lunghezza];
  13.         System.out.println("inserisci i valori del vettore");
  14.         for(int z=0; z<lunghezza;z++)
  15.             v[z]=tastiera.nextInt();
  16.         stampaVettori(v);
  17.        
  18.         char input=stampaMenu();
  19.         switch(input){
  20.             case '1':
  21.                 mergeSort(v,i,j);
  22.                 stampaVettori(v);
  23.             break;
  24.             default:
  25.             System.exit(0);
  26.             break;
  27.         }
  28.        
  29.     }
  30.        
  31.        
  32.        
  33.    
  34.    
  35.    
  36.    
  37. //METODI
  38.     //stampa array
  39.    
  40.     public static void stampaVettori(int[] v){
  41.         System.out.print("[");
  42.         for(int h=0; h<v.length;h++)
  43.             System.out.print("_"+v[h]);
  44.         System.out.print("]");
  45.     }
  46.     //stampa menu
  47.     public static char stampaMenu(){
  48.         String input;
  49.         Scanner tastiera=new Scanner(System.in);
  50.        
  51.         System.out.println("\nPremi 1 se vuoi merge sort");
  52.         //INSERIRO' ALTRE OPZIONI
  53.         System.out.println("Premi qualunque altro tasto per uscire");
  54.        
  55.         input=tastiera.nextLine();
  56.         return input.charAt(0);
  57.     }
  58.    
  59.     //Merge Sort                            //MI DA QUALCHE ERRORE
  60.    
  61.     public static void mergeSort(int[] v, int i, int j){
  62.         int q;
  63.         if(i<j){
  64.             q=(i+j)/2;
  65.             //System.out.println("\n\n i: "+i+" j: "+j+" q: "+q);       //DEBUG
  66.             mergeSort(v,i,q);
  67.             mergeSort(v,q+1,j);
  68.             merge(v,i,q,j);
  69.         }
  70.     }
  71.     public static void merge(int[] v, int i, int q, int j){
  72.         int n1=q-i+1;                       //lunghezza di v[i,q]
  73.         int n2=j-q;                         //lunghezza di v[q+1,j]
  74.        
  75.         int[] left=new int[n1+1];           //vettori di appoggio
  76.         int[] right=new int[n2+1];
  77.        
  78.        
  79.         //ricopio in left e right
  80.         int l=0;
  81.         int r=0;
  82.         int a;
  83.         for(l=0;l<n1;l++){
  84.             left[l]=v[l+i];
  85.         }
  86.         for(r=0;r<n2;r++){
  87.             right[r]=v[q+1+r];
  88.         }
  89.        
  90.         left[n1]=999999;                    //valori sentinella
  91.         right[n2]=999999;
  92.        
  93.         /*//debug
  94.         System.out.println("\n\nleft");
  95.         stampaVettori(left);
  96.         System.out.println("\n\nright");
  97.         stampaVettori(right);
  98.         //fine debug*/
  99.        
  100.         l=0;                                //inizializzo gli indici
  101.         r=0;
  102.        
  103.         for(a=i; (a<left.length)&&(a<right.length); a++){               //inizio ad ordinare
  104.             if((left[l]==999999)&&(right[r]==999999)){
  105.                 System.out.println("finito");
  106.                 break;
  107.             }
  108.            
  109.             if((left[l]==999999)&&(right[r]!=999999))
  110.                 left[l]=right[r]+1;
  111.                
  112.             if((left[l]!=999999)&&(right[r]==999999))
  113.                 right[r]=left[l]+1;
  114.                
  115.             if(left[l]<=right[r]){
  116.                 v[a]=left[l];
  117.                 l++;
  118.             }
  119.             else{
  120.                 v[a]=right[r];
  121.                 r++;
  122.             }
  123.         }
  124.     }  
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement