reverse descending
This commit is contained in:
@ -39,15 +39,30 @@ public class timsort {
|
|||||||
int j = i;
|
int j = i;
|
||||||
boolean ascending = true;
|
boolean ascending = true;
|
||||||
boolean descending = true;
|
boolean descending = true;
|
||||||
|
boolean ascendingCache = false;
|
||||||
|
boolean descendingCache = false;
|
||||||
for(; i < unsorted.length - 1 && (ascending || descending); ++i) {
|
for(; i < unsorted.length - 1 && (ascending || descending); ++i) {
|
||||||
|
ascendingCache = ascending;
|
||||||
|
descendingCache = descending;
|
||||||
ascending = ascending && unsorted[i] <= unsorted[i + 1];
|
ascending = ascending && unsorted[i] <= unsorted[i + 1];
|
||||||
descending = descending && unsorted[i] >= unsorted[i + 1];
|
descending = descending && unsorted[i] >= unsorted[i + 1];
|
||||||
}
|
}
|
||||||
if(i - j < minRun) i = j + minRun;
|
if(i - j < minRun) i = j + minRun;
|
||||||
if(i >= unsorted.length - 1) i = unsorted.length;
|
boolean minRunNotMet = i >= unsorted.length - 1;
|
||||||
runs.add(Arrays.copyOfRange(unsorted, j, i));
|
if(minRunNotMet) i = unsorted.length;
|
||||||
|
int[] temp1 = Arrays.copyOfRange(unsorted, j, i);
|
||||||
|
if(!ascendingCache && descendingCache && !minRunNotMet) {
|
||||||
|
// reverses the array
|
||||||
|
int l, temp;
|
||||||
|
for(l = 0; l < temp1.length / 2; l++) {
|
||||||
|
temp = temp1[l];
|
||||||
|
temp1[l] = temp1[temp1.length - l - 1];
|
||||||
|
temp1[temp1.length - l - 1] = temp;
|
||||||
}
|
}
|
||||||
int[][] notMerged= new int[runs.size()][];
|
}
|
||||||
|
runs.add(temp1);
|
||||||
|
}
|
||||||
|
int[][] notMerged = new int[runs.size()][];
|
||||||
for(int i = 0; i < runs.size(); ++i) {
|
for(int i = 0; i < runs.size(); ++i) {
|
||||||
notMerged[i] = insertionsort(runs.get(i));
|
notMerged[i] = insertionsort(runs.get(i));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user