package task6; import util.Util; public class Sorter { public void sort(int[] array) { if (array == null || array.length <= 1) return; int n = array.length; int[] temp = new int[n]; while (true) { int i = 0; int merges = 0; while (i < n) { // Find first run int left = i; while (i + 1 < n && array[i] <= array[i + 1]) i++; int mid = i; i++; if (i >= n) break; // Find second run while (i + 1 < n && array[i] <= array[i + 1]) i++; int right = i; i++; // Merge both runs merge(array, temp, left, mid, right); merges++; } if (merges == 0) break; } } private void merge(int[] array, int[] temp, int left, int mid, int right) { System.arraycopy(array, left, temp, left, right - left + 1); int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (temp[i] <= temp[j]) { array[k++] = temp[i++]; } else { array[k++] = temp[j++]; } } while (i <= mid) array[k++] = temp[i++]; while (j <= right) array[k++] = temp[j++]; } public static final void main(String[] args) { int[] array = new int[100000000]; Util util = new Util(); util.fillArrayRandom(array, 10000000); Sorter mySorter = new Sorter(); mySorter.sort(array); } }