一、希尔排序原理
将数据区分成特定的间隔的几个小区块,以插入排序法排完区块内容的数据后再渐渐减少间隔的距离。下面以10、5、30、15、6等5位数进行图形演示。
代码:
package Sort;
public class shell {
//定义排序的数组并给予赋值
private static Integer[] nums = {10,5,30,15,6};
//定义扫描次数
private static Integer number = 1;
//希尔排序法
public static void Shell_Sort(){
System.out.println("---希尔排序---");
//定义希尔增量
Integer gap = nums.length / 2;
//当gap不等于0时也就是数据划分还可以再缩小间隔时继续循环
while (gap != 0){
//对数组进行分组
for (int i = 0;i < gap;i++){
//for循环进行插叙排序
for (int j = i+gap;j < nums.length; j += gap){
//获取当前值
Integer current = nums[j];
//从尾开始向前找,因为插入之前都是排好序的
for (int k = j - gap;k >=i;k -= gap){
if (nums[k] > current){
//插入排序
nums[k + gap] = nums[k];
nums[k] = current;
}
}
}
}
gap /= 2;
print();
}
}
public static void print(){
System.out.print("第"+number+"次缩小间隔排序:");
number ++;
for (int n = 0;n < nums.length;n++){
System.out.print(nums[n]+"\t");
}
System.out.println();
}
public static void main(String[] args) {
//希尔排序
Shell_Sort();
}
}
运行结果截图