希尔排序(Shell Sort)也是一种插入排序,又称缩小增量排序(Diminishing Increment Sort)。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个序列分成一组,算法便终止。
算法描述:
1,先取一个正整数d1<n,把所有序号相隔d1的数组元素放在一组,组内进行直接插入排序。
2,然后取d2<d1,重复1中的分组和排序操作。
3,直至di=1,即所有记录放进一个组中排序为止。
动图演示:

代码实现:
public class Sort{ public static void printArr(int[] arr){ for(int i:arr){ System.out.print(i+" "); } } public static void shellSort(int[] arr){ if(arr==null){ return; } //增量 按1/2数组长度递减 int gap=arr.length/2; int temp,j; while(gap>0){ //遍历数组,同一组内元素进行插入排序 for(int i=gap;i<arr.length;i++){ j=i; temp=arr[i]; while(j-gap>=0&&temp<arr[j-gap]){ arr[j]=arr[j-gap]; j=j-gap; } arr[j]=temp; } gap=gap/2; } } public static void main(String[] args){ int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; shellSort(arr); printArr(arr); } }
posted on
浙公网安备 33010602011771号