我正在尝试实施Shell Sort。了解Shell Sort将排序分解为分段插入我使用值10,首先将其分为5以开始第一个分段。然后2表示第二个分段,然后1表示最后一个分段。问题在于最后的1分段。数组的第一个元素不会被if语句检查。当使用大小为12的数组时,array [0]和array [10-11]发现自己没有排序。我似乎找不到我的for循环或while循环的正确起点,即分段插入排序。 数组10未分类:10 9 8 7 6 5 4 3 2 1 分类:10 1 2 3 4 5 6 7 8 9 数组12未分类:12 11 10 9 8 7 6 5 4 3 2 1 分类:12 1 2 3 4 5 6 7 8 9 10 11 编辑::我不认为问题在于分割方面。看作排序的最后一段差距是1。 n =大小; h =段;
public int SegmentedInsertionSort(IntegerType[] A, int n, int h)
{
IntegerType temp;
System.out.println("Entered Segmeted InsertionSort");
for(int -> h+1 to n)
{
int j = i -h;
while( j > 0)
{
if (A[j].isBetterThan(A[j+h]))
{
System.out.println("Swap");
temp = A[j+h];
A[j+h] = A[j];
A[j] = temp;
j=j-h;
}else
{
System.out.println("Ever?");
j = 0;
}
}
System.out.println("Segmenting");
}System.out.println("outter loop done"); return h;
}
public void ShellSort(IntegerType[] A, int size)
{
int H = (size/2);
System.out.println("Entering Shell Sort");
while(H > 0)
{
SegmentedInsertionSort(A, size, H);
H = H/2;
}
}