public static void doSort(RS[] arrRS,int n_arrRS,int[] arrDelta,int n_arrDelta) {
//每个delta增量,都进行一次【希尔插入】
//当delta增量为【1】时,【希尔插入】即等同【直接插入排序】
for(int i=0; i<n_arrDelta; ++i){
shellInsert(arrRS, n_arrRS, arrDelta[i]);
}
}
private static void shellInsert(RS[] arrRS, int n_arrRS,int delta){
// 存放,【待插入的RS】
RS holding_RS = null;
// 【移动指示索引】
int moving_Index = 0;
//从全列【第二个】开始(0 为 第一个索引),【逐个处理】-----【向前插入】
for(int i = delta; i< n_arrRS; i++){
// 与【前部有序子列---最后一个】比较
// ▇▇▇▇▇ ○ ◇◇◇◇◇◇◇◇◇
if(arrRS[i-delta].val > arrRS[i].val){ // 小了,就要插到前面去
// 存放,【待插入的RS】
holding_RS = arrRS[i];
//从【有序子列---最后一个】开始后移
moving_Index = i-delta;
//移到【适当的位置】为止
while (0 <= moving_Index && arrRS[moving_Index].val > holding_RS.val) {
//后移一个位置
arrRS[moving_Index + delta] = arrRS[moving_Index];
//下一次,将处理【前一个】
moving_Index -= delta;
}
// holding_RS 插入【最终位置】
arrRS[moving_Index+delta] = holding_RS;
}
}
}