您的位置:首页 > 其它

算法复习之快排

2016-04-17 10:56 127 查看
/**
* 希尔排序
* 时间复杂度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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: