package day04;
/**希尔排序:
*时间复杂度 O (n^ (1.3-2)) ,空间复杂度为常数阶 O (1)
* 1.将元素分为几组 (通常为总数的1/2),在组内分别先把几个小部分的元素排序好,
*
* 2.每一躺都比上一躺相对有序
*
* 3.最后再全面使用插入排序。一般最后一次排序都是和上面的插入排序一样的;
*/
public class ShellSort {
public static void ShellSort(int[] data) {
System.out.println("开始排序");
int arrayLength = data.length;//定义用来接收数组长度
int h = 1;
//将元素分为几组,在组内进行排序
//knuth序列
while (h <= arrayLength / 3) {
h = h * 3 + 1;
}
while (h > 0) {
//里面是插入排序的内容
System.out.println("h=" + h);
for (int i = h; i < arrayLength; i++) {
int temp = data[i];
if (data[i] - data[i - h] < 0) {
int j = i - h;
for (; j >= 0 && data[j] - temp > 0; j -= h) {
data[j &#
希尔算法详解
最新推荐文章于 2025-06-05 17:14:04 发布