排序算法之希尔排序

来源:互联网 发布:淘宝折800 编辑:程序博客网 时间:2024/05/22 00:06

希尔排序就是把数据每次分成固定步长,并进行排序,例如{ 8, 5, 6, 1, 7, 0 },下标0到5,第一次拿下标 (0和3),(1和4),(2和5)排序,排序的结果是{ 1, 5, 0, 8, 7, 6 },第二次拿下标(0和1),(1和2),(2和3),(3和4),(4和5),(5和6)比较就能得出排序的结果

代码如下

public class Test {public static void main(String[] args) {int[] values = { 8, 5, 6, 1, 7, 0 };values = sort(values);for (int i : values)System.out.print(i + " ");}public static int[] sort(int[] values) {if (values == null || values.length <= 1)return values;int split = values.length / 2;while (1 <= split) {// 把距离为 split 的元素编为一个组,扫描所有组for (int i = split; i < values.length; i++) {int j = 0;int temp = values[i];// 对距离为 split 的元素组进行排序for (j = i - split; j >= 0 && temp < values[j]; j = j - split) {values[j + split] = values[j];}values[j + split] = temp;}split = split / 2; // 减小增量}return values;}}

可以看出希尔排序会省很多移位,但是数据排列的每次都要移动时性能就非常低,所以它很不稳定。


原创粉丝点击