Pagini recente » Cod sursa (job #1871777) | Cod sursa (job #1818438) | Istoria paginii runda/oni2014_ziua_iv | Cod sursa (job #1585379) | Cod sursa (job #1810137)
import java.util.*;
import java.io.File;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputReader reader = new InputReader("algsort.in");
BufferedWriter writer = new BufferedWriter(new FileWriter("algsort.out"));
int nrOf = reader.nextInt();
int[] array = new int[nrOf];
for(int i = 0 ; i < nrOf; i++) {
array[i] = reader.nextInt();
}
mergeSort(array);
for(int i = 0 ; i < array.length;i++) {
writer.write(array[i] + " ");
}
writer.close();
}
public static void mergeSort(int[] inputArray) {
int size = inputArray.length;
if (size < 2)
return;
int mid = size / 2;
int leftSize = mid;
int rightSize = size - mid;
int[] left = new int[leftSize];
int[] right = new int[rightSize];
for (int i = 0; i < mid; i++) {
left[i] = inputArray[i];
}
for (int i = mid; i < size; i++) {
right[i - mid] = inputArray[i];
}
mergeSort(left);
mergeSort(right);
merge(left, right, inputArray);
}
public static void merge(int[] left, int[] right, int[] arr) {
int leftSize = left.length;
int rightSize = right.length;
int i = 0, j = 0, k = 0;
while (i < leftSize && j < rightSize) {
if (left[i] <= right[j]) {
arr[k] = left[i];
i++;
k++;
} else {
arr[k] = right[j];
k++;
j++;
}
}
while (i < leftSize) {
arr[k] = left[i];
k++;
i++;
}
while (j < leftSize) {
arr[k] = right[j];
k++;
j++;
}
}
private static class InputReader {
BufferedReader reader;
StringTokenizer tokenizer;
InputReader(String fileName) throws FileNotFoundException {
reader = new BufferedReader(new FileReader(fileName), 32768);
tokenizer = null;
}
String next() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
}