private void merge(Range r1, Range r2) {
		Integer[] arr = new Integer[r2.end - r1.start + 1];
		int s1 = r1.start, s2 = r2.start;
		int e1 = r1.end, e2 = r2.end;
		int i = 0;

		while (true) {
			if (compare(s2, s1) == order) {
				arr[i++] = getObj(s2);
				if (s2 != e2)
					s2++;
				else {
					for (int j = s1; j <= e1; j++)
						arr[i++] = getObj(j);
					break;
				}
			} else {
				arr[i++] = getObj(s1);
				if (s1 != e1)
					s1++;
				else {
					for (int j = s2; j <= e2; j++)
						arr[i++] = getObj(j);
					break;
				}
			}
		}

		int start = r1.start;
		for (int k = 0; k < arr.length; k++, start++)
			setObj(start, arr[k]);
	}