如何实现希尔排序算法?
package Utils。Sort; /** *希尔排序,要求待排序的数组必须实现Comparable接口 */ public class ShellSort implements SortStrategy { private int[] increment; /** *利用希尔排序算法对数组obj进行排序 */ public void sort(Comparable[] obj) { if (obj == null) { throw new NullPointerException("The argument can not be null!"); } //初始化步长 initGap(...全部
package Utils。Sort; /** *希尔排序,要求待排序的数组必须实现Comparable接口 */ public class ShellSort implements SortStrategy { private int[] increment; /** *利用希尔排序算法对数组obj进行排序 */ public void sort(Comparable[] obj) { if (obj == null) { throw new NullPointerException("The argument can not be null!"); } //初始化步长 initGap(obj); //步长依次变化(递减) for (int i = increment。
length - 1 ;i >= 0 ;i-- ) { int step = increment[i]; //由步长位置开始 for (int j = step ;j = step ;m = m - step ) { if (obj[m]。
compareTo(obj[m - step]) = 0 ;i-- ) { gap[0] = (int)(Math。pow(4, exp[0]) - 3 * Math。pow(2, exp[0]) + 1); gap[1] = (int)(9 * Math。
pow(4, exp[1]) - 9 * Math。pow(2, exp[1]) + 1); //将大的增量先放入增量数组,这里实际上是一个归并排序 //不需要考虑gap[0] == gap[1]的情况,因为不可能出现相等。
if (gap[0] > gap[1]) { increment[i] = gap[0]; exp[0]--; } else { increment[i] = gap[1]; exp[1]--; } } } }
以上是分析内容,仅供参考,谢谢!。
收起