WikiSort
WikiSort copied to clipboard
Description of reverse
Thank you for publishing your work on this algorithm. It is very fascinating. I am reading Chapter 1. I would just like to get some clarification about the reverse method. I know that the method is simple, but does this really do what it says it does? I have written a small example to test it.
public class WikiSortTest{
static class Range{
public int start;
public int end;
public Range(int start1, int end1){
start = start1;
end = end1;
}
public Range(){
start =0;
end =0;
}
void set(int start1, int end1){
start = start1;
end = end1;
}
int length(){
return end-start;
}
}
static void swap(int[] A, int i, int j){
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
static void reverse(int[] A, Range range){
for(int index=range.length()/2 -1; index >=0; index--){
swap(A,A[range.start+index],A[range.end-index-1]);
}
}
static void printArray(int[] A){
System.out.println();
for(int i=0; i < A.length; i++){
System.out.printf(A[i]+" | ");
}
System.out.println();
}
public static void main(String[] args){
int[] A = new int[]{0,1,2,3,4};
printArray(A);
Range range = new Range(0,3);
reverse(A,range);
printArray(A);
}
}
The output from this program is
PS D:\Algorithm Analysis> javac WikiSortTest.java
PS D:\Algorithm Analysis> java WikiSortTest
0 | 1 | 2 | 3 | 4 |
2 | 1 | 0 | 3 | 4 |
Is this to be expected?
Hi there, so the reverse function takes a range within the array and reverses that range. The ranges are considered exclusive so Range(0, 3) means >= index 0 and < index 3. In the example you can see it reversed the first 3 items and left items outside that range untouched. Sorry if that wasn't clear in the docs.