希尔算法作为插入算法的升级版,通过对数据进行分组,对插入算法进行优化,在此处设置了两个方法:一个是交换法;一个是位移法。其中位移法与插入算法更加类似。希尔算法就是通过从小组进行比较,再到大组比较来实现时间的优化。
import java.util.Arrays;
public class xiersort {
public static void shellsort(int[] arr)
{
for(int gap=arr.length/2;gap>0;gap=gap/2)
{
for(int i=gap;i<arr.length;i++)
{
for(int j=i-gap;j>=0;j -=gap)
{
if(arr[j]>arr[j+gap])
{
int temp=0;
temp=arr[j];
arr[j]=arr[j+gap];
arr[j+gap]=temp;
}
}
}
}
}
public static void shellsort2(int[] arr)
{
for(int gap=arr.length/2;gap>0;gap=gap/2)
{
for(int i=gap;i<arr.length;i++)
{
int j=i;
int temp=arr[j];
if(arr[j]<arr[j-gap])
{
while(j-gap>=0&&temp<arr[j-gap])
{
arr[j]=arr[j-gap];
j=j-gap;
}
arr[j]=temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = { 8, 9, 1, 7, 2, 3, 5, 4, 6, 0 };
int[] arr1 = { 8, 9, 1, 7, 2, 3, 5, 4, 6, 0 };
shellsort(arr);
System.out.print(Arrays.toString(arr));
shellsort2(arr1);
System.out.print(Arrays.toString(arr1));
}
}