希尔排序
一、希尔排序算法的原理
希尔排序称为改进的插入排序,首先取一个间隔,将间隔的数进行首次排序,间隔大时移动次数少,间隔小时移动的间距小,所以计算速度快,再将间隔缩小进行排序,这时候基本接近顺序排列了,最后普通插入排序即可。
下面展示一些 希尔排序代码片
。
//希尔排序法
package arraylist;
public class ShellSort {
public static void main(String[] args) {
int[] arr= {6,5,8,3,9,7,2,4};
sort(arr);
print(arr);
}
//间隔序列Knuth序列h=1 h=3h+1;
public static void sort(int[] arr) {
int h=1;
while(h<=arr.length/3) {
h=h*3+1;
}//找出最大的步长
// int gap=arr.length/2;
for(int gap=h;gap>0;gap=(gap-1)/3) {
for(int i=gap;i<arr.length;i++) {
for(int j=i;j>gap-1;j-=gap) {
if(arr[j]<arr[j-gap])
swap(arr,j,j-gap);
}
}
}
}
static void swap(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
static void print(int[] arr) {
for(int i1=0;i1<arr.length;i1++) {
System.out.print(arr[i1]+" ");
}
}
}
希尔排序经历了里外两次For循环,时间复杂度为***O(n^1.3)***,算法是不稳定的。