public static void myShellSort(int[] array){ int gap=array.length/2;//希尔排序的间距,如果间距为2,那么0,2,4,6,8,10...元素就认为是一个数组,1,3,5,7,9..也认为是一个新数组。 // 就是用来切分数组的,为什么这样做去百度百科看下吧,人家讲的比我好 do{ for(int i=0;i<gap;i++){//分解数组,因为间距为gap,所以这些子数组的头下标为0~gap,里面就是一个直接插入排序 for(int j=i+gap;j<array.length;j=j+gap){//这就是一个插入排序,只不过是有间距为gap组成的数组内完成的 int key=array[j];//待插入的元素 int preIndex=j-gap;//待插入元素的前一个元素的下标 while(preIndex > -1 && key < array[preIndex]){ array[preIndex+gap]=array[preIndex]; preIndex -= gap; } array[preIndex+gap]=key; } } gap /= 2; }while (gap>1); }
希尔排序
最新推荐文章于 2025-01-21 00:21:24 发布