5.1 算法的目标

对数组按照升序/降序进行排序

5.2 算法的基本思想

插入排序的优化,尽可能的使较小的元素排在前面,使排序性能更加优化。
记录按照下标的一定增量分组,对每组使用直接插入排序,直至增量减少为1,整个数组排序结束。

5.3 算法的具体步骤

以数组[63,76,13,44,91,8,82,3]为例
step1:首先根据数组的长度确定排序的次数为:length/2-1次
step2:确定第一次排序的组数(相同颜色为一组) 5、希尔排序 - 图1 对每组进行插入排序操作进行排序 ,得到结果
5、希尔排序 - 图2 step3:确定第二次排序的组数(相同颜色为一组)
5、希尔排序 - 图3 对每组进行插入排序操作进行排序 ,得到结果
5、希尔排序 - 图4 step4:确定第三次排序的组数(相同颜色为一组)
此时为最后一组,进行普通的插入排序
5、希尔排序 - 图5

  1. /**
  2. * 希尔排序
  3. * @param nums
  4. */
  5. public static void sort(int []nums){
  6. //确定排序的总次数
  7. for (int i = nums.length/2; i >0 ; i/=2) {
  8. //确定每次排序的组数
  9. for (int j = i; j <nums.length ; j++) {
  10. //对于每组进行插入排序操作
  11. int indexvalue=nums[j],index=j-i;
  12. while (index>=0&&nums[index]>indexvalue){
  13. nums[index+i]=nums[index];
  14. index-=i;
  15. }
  16. nums[index+i]=indexvalue;
  17. }
  18. System.out.print("第"+i+"次排序的结果为:");
  19. System.out.println(Arrays.toString(nums));
  20. }
  21. }