排序算法之希尔排序
希尔排序(Shell Sort)
希尔算法核心思想是其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中。
算法描述
(1)设置一个增量,根据增量进行分组(并不是真的分组,而是假设是分了一个组,每个数在数组的位置还是不变的)
(2) 在分组里面做一个插入排序
(3) 增量/2,继续走步骤12
(4) 直到增量 = 1
代码实现
public class ShellSort {
public static void main(String[] args) {
int[] num = new int[]{5,3,2,6,4,7,1,5};
num = sort(num);
for (int k : num) {
System.out.print(k + " ");
}
}
static int[] sort(int array[])
{
int d = array.length/2; //设置希尔排序的增量
while(d>=1)
{
for(int i=d;i<array.length;i++)
{//以下是一个插入排序
int temp=array[i];
int j=i-d;
while(j>=0 && array[j]>temp)
{
array[j+d]=array[j];
j=j-d;
}
array[j+d] = temp;
}
d= d/2;
}
return array;
}
}
算法分析
最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
参考:
算法实现可以看下:https://blog.csdn.net/qq_37466121/article/details/85957138
不负光阴不负卿