Cod sursa(job #1481425)

Utilizator Biancageorgianaonici bianca Biancageorgiana Data 4 septembrie 2015 14:09:23
Problema Statistici de ordine Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.73 kb
//Dat un vector de n elemente, sa se afle al k-le minim din vector

package curs5;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

class StatisticiDeOrdine {

	private int A[];
	private int dim;
	private int k;
	private int valoare;
	
	private void creare() {
		try {
			Scanner sc=new Scanner(new File("sdo.in"));
			
			dim=sc.nextInt();
			k = sc.nextInt();
			A=new int[dim + 1];
			for(int i = 1; i <= dim; i++)
				A[i]=sc.nextInt();
			sc.close();
		} catch(FileNotFoundException ex) {
			System.out.println("Fisierul nu a fost gasit!");
			ex.printStackTrace();
		}
	
	}
	
	private void quicksort(int p, int u) {
		if(p < u){
			int m = partitie(p, u);
			if(m == k){
				valoare =  m;
			}
			if(k < m)
				quicksort(p, m);
			else if(k > m)  quicksort(m + 1, u);
		}
	}
	
	private int partitie(int p, int u) {
		int x = A[p];
		int i = p;
		for(int j = i+1; j <= u; j++) {
			if(A[j] < x) {
				i++;
				int aux = A[i];
				A[i] = A[j];
				A[j] = aux;
			}
		}
		int aux = A[p]; 
		A[p] = A[i];
		A[i] = aux;
		return i;
	}
		
	public static void main(String args[]) {
		try {
		    FileWriter fWriter = new FileWriter ("sdo.out");
		    PrintWriter pWriter = new PrintWriter (fWriter);
			StatisticiDeOrdine obj = new StatisticiDeOrdine();
			obj.creare();
			obj.quicksort(1, obj.dim);
			pWriter.print(obj.A[obj.valoare]);
			pWriter.close();
		} catch(FileNotFoundException ex) {
			System.out.println("Fisierul nu a fost gasit!");
			ex.printStackTrace();
		}
		catch(IOException e) {
			System.out.println("Eroare!");
			e.printStackTrace();
		}
	}
}