希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。
将数组列在一个表中并对列排序(用插入排序)。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序。
package com.maogh.sort;
/**
* shell sort
* @author wikipedia
*
*/
public class ShellSort implements Sort {
@Override
public float[] sort(float[] a) {
int i, j, k, gap;
float temp;
int n = a.length;
int[] gaps = { 1, 5, 13, 43, 113, 297, 815, 1989, 4711, 11969, 27901,
84801, 213331, 543749, 1355339, 3501671, 8810089, 21521774,
58548857, 157840433, 410151271, 1131376761, 2147483647 };
// 获得步数
for (k = 0; gaps[k] < n; k++)
;
while (--k >= 0) {
gap = gaps[k];
for (i = gap; i < n; i++) {
temp = a[i];
j = i;
while (j >= gap && a[j - gap] > temp) {
a[j] = a[j - gap];
j = j - gap;
}
a[j] = temp;
}
}
return a;
}
}