private int smallestOffsprings(int i) {
		int firstChild = 2 * i, lastChild = 2 * i + 1;
		int firstGrand = 4 * i, lastGrand = 4 * i + 3;
		int smallest = arr[firstChild], smallestIndex = firstChild;
		int bound = currentSize < lastChild ? currentSize : lastChild;
		for(int j = firstChild; j <= bound; ++j) {
			if(arr[j] < smallest) {
				smallest = arr[j];
				smallestIndex = j;
			}
		}
		
		if(this.currentSize < firstGrand) return smallestIndex;
		bound = currentSize < lastGrand ? currentSize : lastGrand;
		for (int j = firstGrand; j <= bound; ++j) {
			if (arr[j] < smallest) {
				smallest = arr[j];
				smallestIndex = j;
			}
		}
		return smallestIndex;
	}