shell 排序

版权声明:未经允许禁止转载 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));
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_38481963/article/details/87816529
今日推荐