public void test1(){
int length = 10;
for (int step = length / 2; step >= 0 ; step /= 2) {//step这样设置的原因是在于我可以找到从头开始的第一个步长对应的索引值,这样的话,就保证了j-step时的不溢出,并且先是做的两两交换的插排,
// 当i进去第二个步长时,做的就是三个元素之间的插排,当然,插排的顺序是从后往前作比较,j-=step的设置就是为此。
// System.out.println(step);
// System.out.println("此时的最短步长为");
for (int i = step; i < length ; i++) {
//由于i是从对小步长值对应的索引index1开始的,那么从0到这个步长step所包含的元素个数即为组数,当然这个无关紧要,更重要的是从最低步长step对应的索引index1开始算起,
// 当这个index1-step时,就可以使用插排对index0与index1进行排序,然后i+1代表index1+1的位置,此时与index0+1做插排的是index0+1,依次类推,可以看出
//index0+2与index1+2做插排直到index1+step=index2时,两两的插排就结束了,就下来是,让j先运行到index1处,index2先与index1做插排,如果符合条件,则交换,
// 然后接下里的j到达index0处,如果index0与index0+step=index1符合条件,交换,
System.out.printf("\n代表的是从最短步长%d对应索引开始,现在i已经到%d:\n", step,i);
System.out.printf("与%d做插排的索引, 即j的数值为:", i);
for (int j = i - step; j >= 0 ; j -= step) {
System.out.printf(j + " ");
if(arr[j] > arr[j+step]){
temp = arr[j];
arr[j] = arr[j+step];
arr[j+step] = temp;
}
}
}
System.out.println();
}
}
``
结果:
代表的是从最短步长5对应索引开始,现在i已经到5:
与5做插排的索引, 即j的数值为:0
代表的是从最短步长5对应索引开始,现在i已经到6:
与6做插排的索引, 即j的数值为:1
代表的是从最短步长5对应索引开始,现在i已经到7:
与7做插排的索引, 即j的数值为:2
代表的是从最短步长5对应索引开始,现在i已经到8:
与8做插排的索引, 即j的数值为:3
代表的是从最短步长5对应索引开始,现在i已经到9:
与9做插排的索引, 即j的数值为:4
代表的是从最短步长2对应索引开始,现在i已经到2:
与2做插排的索引, 即j的数值为:0
代表的是从最短步长2对应索引开始,现在i已经到3:
与3做插排的索引, 即j的数值为:1
代表的是从最短步长2对应索引开始,现在i已经到4:
与4做插排的索引, 即j的数值为:2 0
代表的是从最短步长2对应索引开始,现在i已经到5:
与5做插排的索引, 即j的数值为:3 1
代表的是从最短步长2对应索引开始,现在i已经到6:
与6做插排的索引, 即j的数值为:4 2 0
代表的是从最短步长2对应索引开始,现在i已经到7:
与7做插排的索引, 即j的数值为:5 3 1
代表的是从最短步长2对应索引开始,现在i已经到8:
与8做插排的索引, 即j的数值为:6 4 2 0
代表的是从最短步长2对应索引开始,现在i已经到9:
与9做插排的索引, 即j的数值为:7 5 3 1
代表的是从最短步长1对应索引开始,现在i已经到1:
与1做插排的索引, 即j的数值为:0
代表的是从最短步长1对应索引开始,现在i已经到2:
与2做插排的索引, 即j的数值为:1 0
代表的是从最短步长1对应索引开始,现在i已经到3:
与3做插排的索引, 即j的数值为:2 1 0
代表的是从最短步长1对应索引开始,现在i已经到4:
与4做插排的索引, 即j的数值为:3 2 1 0
代表的是从最短步长1对应索引开始,现在i已经到5:
与5做插排的索引, 即j的数值为:4 3 2 1 0
代表的是从最短步长1对应索引开始,现在i已经到6:
与6做插排的索引, 即j的数值为:5 4 3 2 1 0
代表的是从最短步长1对应索引开始,现在i已经到7:
与7做插排的索引, 即j的数值为:6 5 4 3 2 1 0
代表的是从最短步长1对应索引开始,现在i已经到8:
与8做插排的索引, 即j的数值为:7 6 5 4 3 2 1 0
代表的是从最短步长1对应索引开始,现在i已经到9:
与9做插排的索引, 即j的数值为:8 7 6 5 4 3 2 1 0
代表的是从最短步长0对应索引开始,现在i已经到0:
希尔排序
最新推荐文章于 2023-11-28 16:53:17 发布