关于希尔排序做出的优化。
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;
}
}
}
}优化了内层循环体,因为之前分组时已经将最大值放在了分组的最后一个数,那么当我新加到数组的那个数只要大于分组的最后一个数,那么我就可以不用再向前一一比较,也就是跳出了最内层的循环。

京公网安备 11010502036488号