关于希尔排序做出的优化。
private static void shellSort(int[] arr) { int h=1; while(h<=arr.length) { h=h*3+1; } boolean flag; for(int gap=h;gap>0;gap=(gap-1)/3) { for(int i=gap;i<arr.length;i++) { flag=false; for(int j=i;j>gap-1;j-=gap) { if(arr[j]<arr[j-gap]) { swap(arr,j,j-gap); flag=true; } if(flag==false)break; } } } }
优化了内层循环体,因为之前分组时已经将最大值放在了分组的最后一个数,那么当我新加到数组的那个数只要大于分组的最后一个数,那么我就可以不用再向前一一比较,也就是跳出了最内层的循环。