/**
* 希尔排序
* 时间复杂度O(n(3/2))
* 设置步长,通过步长分组,组内进行插入排序
* @author Feng
*
*/
public class ShellSort {
public static void sort(int[]src){
int step = src.length;
do{
step = step/3+1;//除以3 3是可变的,根据问题规模进行相应处理,+1不可变,确保步长为一的情形一定会出现
for (int i = step; i < src.length; i+=step) {
if(src[i]<src[i-step]){
for (int j = i; j >=step; j-=step) {
if(src[j]<src[j-step]){
exchange(src,j,j-step);
}else{
break;
}
}
}
}
}while(step>1);
}
public static void exchange(int[]src,int i,int j){
int temp=src[i];
src[i]=src[j];
src[j]=temp;
}
public static void main(String[] args) {
int[] src = new int[]{5,2,8,3,5,0};
sort(src);
for (int i : src) {
System.out.println(i);
}
}
}
算法复习之希尔排序
最新推荐文章于 2022-09-02 13:11:46 发布