I think this will work too:
O (n) algorithm
i = 0
highestStart = 0
size = array.size
for i < size -1
if array[i] > array[i+1]
x = array[i]
delete array[i]
array[array.size] = x
highestStart = i
else if array[i] < array[i+1]
highestStart = i+1
end if
end if
i = i+1
end for
return subarray[highestStart, array.size -1]
1*,5*,4 ,7 ,9 ,4 ,9 :0,1
1 ,5*,4*,7 ,9 ,4 ,9 :1,2
1 ,4 ,7*,9*,4 ,9 ,5 :2,3
1 ,4 ,7 ,9*,4*,9 ,5 :3,4
1 ,4 ,7 ,4 ,9*,5*,9 :4,5
1 ,4 ,7 ,4 ,5 ,9*,9* :5,6