版权声明:未经允许禁止转载 https://blog.csdn.net/weixin_38481963/article/details/87816529
shell 排序算法,是直接插入排序算法的改进算法。
shell排序是不稳定的算法,因为他不能保证原有排序。假设一个数组中有两个2,那么经过shell排序后,这两个2可能已经交换过位置了。
shell排序的速度与增量值的选取有很大关系。目前已知的最好序列是:{1,4,10,23,57,132,701,1750,…},具有此分组序列的shell排序比插入排序和堆排序要快。在小数组(少于50个元素)情况下比快速排序要快,对大数组比快速排序要慢。
shell排序算法实现:
import java.util.Arrays;
public class Test {
public static void shellSort(int arr[]){
int tmp,i;
for(int d = arr.length/2; d>0; d /= 2)
{
//下面的内容和直接插入排序算法原理一致
for(int j=d; j<arr.length; j++)
{
tmp = arr[j];
for(i = j-d; i>=0 && arr[i]>tmp; i -= d)
{
arr[i+d] = arr[i];
}
arr[i+d] = tmp;
}
}
}
public static void main(String[] args) {
int arr[] = {2,4,5,2,2,57,87,55};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
}