Cod sursa(job #1511065)

Utilizator aaa123aa aaa aaa123 Data 25 octombrie 2015 23:31:53
Problema Sortare prin comparare Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.91 kb
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.*;


public class Mergesort {
	
//	static int[] merg(int[] vector, int s, int d){
//		if(s == d - 1){
//			int[] rez = new int[2];
//			if(vector[s] > vector[d]){
//				rez[0] = d;
//				rez[1] = s;
//			}
//			else{
//				rez[0] = s;
//				rez[1] = d;
//			}
//			return rez;
//		}
//		
//		int[] rez = new int[d - s + 1]; 
//		int mij = s + (d - s) / 2;
//		int[] stanga = merg(vector, s, mij);
//		int[] dreapta = merg(vector, mij + 1, d);
//		int i = 0;
//		int j = 0;
//		int ns = stanga.length;
//		int nd = dreapta.length;
//		int k = 0;
//		while(i < ns && j < nd){
//			if(stanga[i] < stanga[j]){
//				vector[s] = stanga[i];
//				rez[k] = stanga[i];
//				s += 1;
//				i += 1;
//				k += 1;
//			}
//			else{
//				vector[s] = dreapta[j];
//				rez[k] = dreapta[i];
//				j += 1;
//				s += 1;
//				k += 1;
//			}
//		}
//		for(; i < ns; i++, s++, k++){
//			vector[s] = stanga[i];
//			rez[k] = stanga[i];
//		}
//		for(; j < nd; j++, s++, k++){
//			vector[s] = dreapta[j];
//			rez[k] = dreapta[j];
//		}
//		return rez;
//	}

	static ArrayList<Integer> merg2(ArrayList<Integer> vector, int s, int d){
	
		ArrayList<Integer> rez = new ArrayList<Integer>();
		if(s == d - 1){
			if(vector.get(s) > vector.get(d)){
				rez.add(vector.get(d));
				rez.add(vector.get(s));
			}
			else{
				rez.add(vector.get(s));
				rez.add(vector.get(d));
			}
			return rez;
		}
		if(s == d){
			rez.add(vector.get(s));
			return rez;
		}
		
		int mij = s + (d - s) / 2;
		ArrayList<Integer> stanga = merg2(vector, s, mij);
		ArrayList<Integer> dreapta = merg2(vector, mij + 1, d);
		int i = 0;
		int j = 0;
		int ns = stanga.size();
		int nd = dreapta.size();
		while(i < ns && j < nd){
			if(stanga.get(i) < dreapta.get(j)){
				rez.add(stanga.get(i));
				i += 1;
			}
			else{
				rez.add(dreapta.get(j));
				j += 1;
			}
		}
		for(; i < ns; i++)
			rez.add(stanga.get(i));
		for(; j < nd; j++)
			rez.add(dreapta.get(j));
		
		return rez;
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Scanner in = new Scanner(new FileReader("algsort.in"));
			int n = in.nextInt();
			ArrayList<Integer> vector = new ArrayList<Integer>();
			for(int i = 0; i < n; i++){
				int x = in.nextInt();
				vector.add(x);
			}
			in.close();
			
			vector = merg2(vector, 0, n - 1);
			
			PrintWriter out = new PrintWriter("algsort.out", "UTF-8");
			for(int i = 0; i < n; i++)
				out.print(vector.get(i).toString() + " ");
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}