In shell sort, 3h+1
sequence is recommended to h-sort a list using insertion sort
//1, 4, 13, 40, ...
Optimal formula to compute start value of h
is one-third of listsize
, as shown below,
int h = 1;
while(h < listSize/3){ // why N/3?
h = 3*h + 1
}
while(h >= 1){
//h-sort the array
// perform insertionSort
h = h/3;
}
Question:
To perform shell sort, How to prove mathematically that h
(at max) should be less than listSize/3
?
If we continue to increase h
after condition (h < listSize/3)
, h
becomes larger than listSize
, and there is no sense in h-sorting - we cannot compare items A[i]
and A[i+h]
because the second index is beyond list range.